MessageBox läuft nach dialog-aufruf nicht mehr?!???



  • 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?


  • Mod

    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??


  • Mod

    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...


  • Mod

    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!


  • Mod

    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();
    }
    

Anmelden zum Antworten