Beenden des Programms


  • Administrator

    Jo ich weiss, das wurde sicher schon 5 mal beantwortet, hört mich aber bitte trotzdem an.
    Ich wollte eine Nachricht zur Abfragung hinsetzen, ob das Programm wirklich beendet werden soll. Also habe ich in der von CView abgeleiteten Klasse eine Funktion für die WindowsMessage WM_CLOSE gemacht. Programmcode:

    void CSfView::OnClose()
    {
    	// TODO: Add your message handler code here and/or call default
    	if(AfxMessageBox("Wollen Sie uns wirklich schon verlassen?", MB_YESNO, NULL) == IDYES)
            CScrollView::OnClose();
    }
    

    Wenn ich nun auf das X klicke, kommt keine Nachricht oder abfrage einfach nichts. Dabei wurde es meiner Meinung nach hier und hier so erklärt. Was mach ich falsch?

    Desweiteren noch eine 2. Frage. Wenn ich nun das Programm durch einen Button beenden möchte, darf ich dann nicht einfach die Funktion OnClose aufrufen? Muss ich immer über PostQuitMessage(0)? Ruft PostQuitMessage(0) OnClose auf?

    Danke für die Hilfe.
    Grüssli



  • 1.) Ich denke Du musst OnClose in Deiner Hauptanwendung, also MainFrame abfangen, nicht in der View...

    2.) Wenn Du per Button das Programm beenden willst und dabei die Abfrage auch erscheinen soll, dann würde ich einfach die OnClose aufrufen.


  • Administrator

    das erste funktioniert ... vielen Dank.
    Nun frag ich mich aber wie ich von einem Button aus die OnClose funktion aufrufe, da sie nur static sein darf, aber ein afx_msg nie static ist 😉 ...
    Gibt es nicht eine Möglichkeit das Programm mit einer Funktion normal zu beenden? Mit PostQuitMessage funktioniert das ja nicht so recht, zumindest handelt der mir dann OnCloseDocument nicht mehr und darin sind Variablen welche aus dem Heap gelöscht werden sollten ...
    Danke für die Hilfe.
    Grüssli


  • Administrator

    *push* für morgen ^^
    Grüssli


Anmelden zum Antworten