WM_DESTROY
-
So, habe ein kleines Verständnisproblem.
Sobald sich meine SDI-Anwendung schließt, speichert es noch Infos in der Registry.
Danach schließt sich das Fenster. Das klappt auch.
Jedoch möchte ich das Fenst auf zwei Arten schließen lassen. Einmal durch den x-Button ober rechts in einer Anwendung und einmal per Menü.
Für diesen Menüeintrag füge ich eine WM_COMMAND-Nachrichtenbehandlungsfunktion hinzu. In dieser sende ich nur die Nachricht WM_DESTROY.
Dann speichert er auch die Daten, aber dann schließt er nicht das Programm!
Stattdessen sind fast alle Menüeinträge grau hinterlegt/disabled.
Erst ein zweites Mal Drücken schließt das Fenster. Dabei springt er nicht einmal mehr in die WM_COMMAND - Routine des Menüeintrags sondern geht direkt zu OnDestroy()!?!
Mir ist das irgendwie nicht klar. Jemand mal ne Ahnung?Zudem ändert das Visual Studio öfter mal meine IDs der Menüeinträge in Zahlen um (z.B: Statt ID_FILE_EXIT -> 65335)?
MfG,
Paul.
-
WM_DESTROY bedeuetet, dass das grafische Windowsfenster zerstört werden soll, es bedeutet nicht, dass die Anwendung geschlossen werden soll, dass wäre WM_QUIT.
-
1.: Ich habe keine WM_QUIT zur Auswahl?!
2.: Wird das Fenster per Menü erst beim zweiten Mal geschlossen/zerstört.Weißt du vielleicht noch weiter?
EDIT: Wenn ich WM_QUIT sende, passiert nix.
-
zu 1. Also der Nachrichtenassistent tut nicht immer alle möglichen Nachricht anzeigen, einige muss man per Hand eintragen.
Wie sendest du denn die Nachricht? Code?
Weil komisch klingt dein verhalten schon.Grundsätzlich gibt es da 3 Nachrichten
WM_CLOSE : schließ das Fenster, Fensterressourcen bleiben erhalten
WM_DESTROY: Fensterressourcen werden freigegeben(pendant zu WM_CREATE)
WM_QUIT : Anwendung wird geschlossen
-
Ok, dann mal hier der Code:
Menüeintrag
void CMyView::OnAppExit() { // speichern der Daten in der Registry ..... SendMessage(WM_DESTROY); // habe hier auch schon einfach OnDestroy() auf gerufen }
x-Button
void CMyView::OnDestroy() { CFormView::OnDestroy(); // speichern der Daten in der Registry ...... }
Mir fällt noch ein, dass ja eventuell noch bevor WM_DESTROY gesendet wird, wenn man der x-Button drückt, noch andere Nachrichten gesendet werden.
Und das mache ich ja nicht vom Menüeintrag aus.Danke für deine Hilfe.
MfG, Paul.