MessageBox läuft nach dialog-aufruf nicht mehr?!???
-
Hab' ich grad probiert: dasselbe ergebnis...
-
Ist vielleicht ne WM_QUIT Message in der Message Queue? Hast du PostQuitMessage oder ähnliches benutzt?
-
WM_QUIT Message in der Message Queue???? Wie kann man das checken bzw. korrigieren??
-
Dein Problem ist dass Du mit der Zeile
m_pMainWnd = &dlg;Deinen Dialog zum Main Window gemacht hast. Dies benötigt die MFC auch, aum ein entsprechende Main Window eben zu haben in bestimmten Funktionen.
Gleichzeitg hat das aber den Effewkt, dass beim Schließen des Main Windows automatisch WM_QUIT gesendet wird. Sobald WM_QUIT in der MessageQueue drin ist, werden keine weiteren fenster mehr erzeugt. Auch nicht Deine Message Box.Du könntest jetzt Die Message Box in den WM_CLOSE Handler Deines Dialoges packen. Oder WM_QUIT aus der Queue lesen und dann die MessageBox anzeigen.
-
habe eine Behandlungsroutine für WM_CLOSE angelegt und darin die MessageBox aufgerufen: geht auch nicht

void CW32Dlg::OnClose() { AfxMessageBox("TEST AFXMSG CLOSE",MB_YESNOCANCEL | MB_ICONWARNING,-1); CDialog::OnClose(); }Wie kann ich denn WM_QUITT von der MessageQueue abholen?
-
Martin Richter schrieb:
Dein Problem ist dass Du mit der Zeile
m_pMainWnd = &dlg;Deinen Dialog zum Main Window gemacht hast. Dies benötigt die MFC auch, aum ein entsprechende Main Window eben zu haben in bestimmten Funktionen.
Ich versteh nicht ganz wieso man bei modalen Dialogfeldern das Dialogfeld zum MainWindow machen muss. Ich rufe das meist in der View-Klasse meiner Anwendung auf und zum Zeitpunkt des Aufrufes ist ja das mein MainWindow. Nach dem Aufruf hat ja die Dialogbox den Focus und weil die modal ist laufen ja auch alle Messages da auf.
@MFCNewby Was willst Du denn genau machen?
-
AndyDD schrieb:
Ich versteh nicht ganz wieso man bei modalen Dialogfeldern das Dialogfeld zum MainWindow machen muss.
Hier geht es um eine dialogbasierende Applikation und nicht um SDI/MDI wie bei Dir!
Erzeuge mit dem Wizard eine dialogbasierende Applikation und Du findest genau diesen Code drin.
-
Sorry, aber das war für mich so nicht ersichtlich.
-
also wenn ich die Zeile
//m_pMainWnd = &dlg;auskommentiere, funktioniert alles wie erwartet! Aber wahrscheinlich hat das irgendwelche anderen Nachteile. Ich möchte einfach eine Aktion starten und habe das der Einfachheit halber mit dem OK-Button verbunden. Ich denke, ich werden das jetzt anders, mit einem neuen Control machen, das nicht zum Schließen des Startdialogs führt. Dann dürfte wohl alles in Butter sein, oder??
-
Das Verstehe ich nicht. Dann müsste er aber die Messagebox im OnClose Handler des Dialoges anzeigen. Bist Du sicher, dass Du den Handler mit MessageMap entry korrekt erzeugt hast?
-
void CWDlg::OnClose() { // TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen AfxMessageBox("***TEST***",MB_YESNOCANCEL | MB_ICONQUESTION); CDialog::OnClose(); }und in der richtigen MessageMap ist OnClose() auch eingetragen - wie die anderen Aktionen auch...
-
Und wenn Du einen Breakpoint auf OnClose setzt, dann wird der auch angelaufen?
Ich werde das zu Hause mal ausprobieren.
-
an einem Breakpoint wird auch korrekt angehalten...
Bin gespannt auf Deine Ergebnisse!
-
Also ich weiß nicht was Du gedebuggt hast?

Aber OnClose wird nur angesprungen wenn ALT+F$, oder das X in der Ecke des fensters geklickt wird. Bei OnOK und OnCancle wird OnClose nicht angesprungen. Mit Sicherheit kann man also nur dann ene Nachricht anzeigen wenn man es im OnDestroy macht.void CTestDLG8Dlg::OnDestroy() { AfxMessageBox(_T("TEST ONDESTROY")); CDialog::OnDestroy(); }