Dialog schließen aber wie?



  • Hallo,

    ich bin neu hier und auch mit MFC habe ich gerade erst angefangen. Mein Problem dreht sich um das Schließen eines Dialoges.
    Ich habe zwei Dialoge. BasicGraphAlone und BasicGraph. Nun will ich beim Drücken des Buttons "Graph" dass der Dialog BasicGraph erscheint.

    void CBasicGraphAloneDlg::OnBnClickedButtonGraph()
    {
    	CBasicGraph* graph;
    	graph = new CBasicGraph;
    	INT_PTR nRet = -1;
    
    	nRet = graph->DoModal();
    }
    

    Beim Schließen soll wieder der BasicGraphAlone-Dialog da sein.

    Es tauchten einige Fehler sowohl beim Schließen, als auch beim erneuten öffnen von BasicGraph auf.
    Beim Schließen trat ein Fehler auf, wenn ich dies mittels WM_CLOSE mache und in OnClose DestroyWindow() aufrufe. Deaktiviere ich die WM_CLOSE, so tritt beim Schließen kein Fehler auf. Warum? Welche Message wird dann ausgegeben, wenn WM_CLOSE deaktiviert ist?

    Nach Öffnen und Schließen von BasicGraph bin ich wieder bei meinem Ausgangsfenster BasicGraphAlone. Beim erneuten Versuch des Öffnens über den Button "Graph" erscheint:

    Windows has triggered a breakpoint in BasicGraphAlone.exe.

    This may be due to a corruption of the heap, and indicates a bug in BasicGraphAlone.exe or any of the DLLs it has loaded...

    Er bricht an der Anstelle CWnd::~CWnd() in der wincore.cpp ab.

    Was ich auch schon versucht habe ist, dass ich den Zeiger graph mit delete lösche. Leider kommt auch hier eine Fehlermeldung.

    Ich hoffe mir kann einer helfen und sagen, wie man ein modales Dialogfenster sicher beendet.

    Danke schon mal im voraus.

    Flo



  • Homer J. schrieb:

    Ich hoffe mir kann einer helfen und sagen, wie man ein modales Dialogfenster sicher beendet.

    Ich mache das immer je nach Anwendungszweck mit OnOK oder OnCancel. 🙂


  • Mod

    ... oder im speziellen mit CDialog::EndDialog.



  • Wann verwendet man dann DestroyWindow? Ich habe in diesem Fenster keine Buttons OnCancel bzw. OnOk zur Verfügung.


  • Mod

    Homer J. schrieb:

    Wann verwendet man dann DestroyWindow? Ich habe in diesem Fenster keine Buttons OnCancel bzw. OnOk zur Verfügung.

    Gar nicht, wenn es ein modaler Diaog ist. Ich habe es doch geschrieben und estartu auch. OnOK, OnCancel, EndDialog!



  • Homer J. schrieb:

    Wann verwendet man dann DestroyWindow? Ich habe in diesem Fenster keine Buttons OnCancel bzw. OnOk zur Verfügung.

    Du brauchst keinen Button um die Funktion aufzurufen. 😉


Anmelden zum Antworten