Nicht-modale KindDialoge
-
Ja, diese Funktion sollte dem Hauptfenster mitteilen, daß das Kindfenster gerade im Nirvana verschwindet - und das Hauptfenster kümmert sich dann um den delete-Aufruf (der an dieser Stelle übrigens unsinnig und falsch ist):
void HauptDialog::OnEndKindDlg() { delete m_pKind; m_pKind = NULL;//das hier ist wichtig, damit die Abfrage in deinem original-Code funktioniert } void KindDlg::OnCancel() { DestroyWindow(); m_pHaupt->OnEndKindDlg(); //entweder du trägst beim Anlegen der Dialoge einen Zeiger auf den Haupt-Dialog ein auf den du hier zugreifen kannst //oder du hangelst dich über die Applikation zum Hauptdialog durch }
-
CStoll schrieb:
//oder du hangelst dich über die Applikation zum Hauptdialog durch }Kanns du das bitte erklären?
-
Ich habe einen Zeiger auf meinen KindDialog im Haupt-Dialog. Kann ich auch einen Zeiger auf Haupt-Dialog im KindDialog haben? Dazu muss ich beide in einander includieren...
-
Kannst du - und damit der Compiler das schluckt, gibt es ein nettes Feature namens "Forward Deklaration" (sprich: im Header des Kind-Dialogs brauchst du keinen #include für den Haupt-Dialog, sondern nur ein "class MeineHauptKlasseDlg;").
-
Er will das nicht schlucken.

-
Was will er nicht schlucken? (im CPP des Kind-Dialogs brauchst du natürlich die volle Definition)
//Haupt.h #include "Kind.h" class HauptDlg : public CDialog { pblic: void OnButtonKind(); void InKindEnd(); ... KindDlg* m_pKind; } //Haupt.cpp #include "Haupt.h" void HauptDlg::OnButtonKind() { ... } ... //Kind.h class HauptDlg; class KindDlg : public CDialog { ... HauptDlg* m_pHaupt; }; //Kind.cpp #include "Kind.h" #include "Haupt.h" ...
-
Aha, er schluckt das. Bei der Ausführung, wenn der Button 'schließen' gedrückt wird (d.h. OnKindEnd() aufgerufen wird), bekomme ich eine Fehlermeldung:
Unbehandelte Ausnahme in Anwendung.exe: 0xC000005: Access Violation

-
Ja, wie ich oben schon geschrieben habe, mußt du beim Anlegen des Kind-Dialogs auch den Verweis zurück auf den Hauptdialog setzen.
(zum Weg über die Applikation kann ich leider nicht viel sagen - ich hab' bisher kaum nicht-modale Dialoge verwendet und brauchte da noch keinen Direktzugang zum Hauptfenster)
-
Also bekomme ich nichts gutes. Beim Drücken des Buttons OnButtonKind() kann ich gleichzeitig mehrere KindDialoge auf dem Bildschirm bekommen. Beim Drücken des Buttons ' KindDialog Schließen' bekomme ich eine Fehlermeldung...

-
Mit Verweis meinst du doch einen Zeiger? Das mache ich.