Schließen einer SDI-Anwendung



  • Also, da ich in meiner Anwendung ein eigenes Menü erstellt habe, habe ich da so meine Probleme, die Anwendung korrekt zu schließen, wenn ich im Menü meinen Eintrag "Exit" drücke.

    Mit Hilfe von Spy++ und einer anderen Anwendung habe ich nun mal herausfinden können, dass folgende Nachrichten geschickt werden:
    WM_CLOSE,
    WM_SHOWWINDOW
    WM_DESTROY
    WM_PARENTNOTIFY
    WM_PARENTNOTIFY
    WM_PARENTNOTIFY
    WM_PARENTNOTIFY
    WM_PARENTNOTIFY

    Ist das so richtig, oder geht es auch einfacher?
    Muss ich nun in meiner Nachrichtenbehandlung alles selber schicken, oder gibt es da einen einfachen Befehl? Oder wird auch ein Teil davon automatisch geschickt?

    Wenn mir hier jemand helfen würde, wäre das sehr nett. 😉
    Komme mir ein wenig doof vor, da das Problem sicherlich nicht so schwierig ist.

    EDIT: Bin mir vor allem mit den WM_PARENTNOTIFYs unsicher:
    Da wurde als wParam : 0xE81B0002 und als
    lParam: 0x000F0908
    gesendet.

    Laut Beschreibung von der Nachricht bedeutet wohl das LOWORD von wParam die Nachricht die gesendet wurde. Hier also 0x0002 -> WM_DESTROY.
    HIWORD gibt den Identifier des Childwindows(???) an. Und lParam das Handle des Childwindows.
    Aber warum schickt der 5 mal die Nachricht? An welche Bestandteile?
    (immer unterschiedliche Handles)



  • Es reicht wenn Du WM_CLOSE schickst...
    Du kannst Deinem Command aber auch die ID "ID_APP_EXIT" zuweisen...

    Siehe:
    http://msdn.microsoft.com/library/en-us/vclib/html/_mfcnotes_tn022.asp



  • Oh, danke. Ich versuche es mal. Denn mit WM_CLOSE ging es nicht. Schreibe ich gleich ausführlicher. 🙂



  • Du kannst auch die ID des Menübefehls an den Mainframe schicken, das sollte auch klappen.

    SendMessage(WM_COMMAND, ID_FILE_CLOSE);
    


  • @Jochen: Ok, hat funktioniert. Besten Dank.
    @estartu_de: da wirft der bei mir immer eine Exception?!?
    Aber dennoch danke!

    MfG, Paul.

    😉



  • Paul_C. schrieb:

    @estartu_de: da wirft der bei mir immer eine Exception?!?

    Hast du davor den Zeiger auf den Mainframe?

    pMainframe->SendMessage(/*s.o.*/);
    


  • Ja, habe das wie in deiner Anleitung mit
    AfxGetMainWnd()->...
    gemacht.
    Dreht sich das denn eigentlich nicht im Kreis? Vielleicht habe ich dich ja misverstanden, aber ich habe nun in der Behandlungsfunktion des Menüeintrags SendMessage ausgeführt?!



  • Paul_C. schrieb:

    Dreht sich das denn eigentlich nicht im Kreis? Vielleicht habe ich dich ja misverstanden, aber ich habe nun in der Behandlungsfunktion des Menüeintrags SendMessage ausgeführt?!

    Ups. 😮
    Ich hatte nicht mitbekommen, dass du das in der Behandlungsfunktion machen willst. 🙄

    Nein, da klappt das nicht.



  • Ok. 😉
    Danke dennoch.


Anmelden zum Antworten