Systemmenü und Minimieren Symbol



  • Hallo,

    habe da zwei kleine Probleme:

    1. Ich habe eine Dialoganwendung die in den Systray verwschwindet wenn ich oben rechts auf das X klicke. Leider tut es das auch wenn im Systemmenü auf "schließen" oder "alt+f4" drücke. Wie komm ich da ran um das zu ändern?

    2. Ich hab im Dialogfeld auch das Icon minimieren eingeblendet. Was muss ich tun damit mein Prog das macht was ich will wenn ich da drauf klicke? Ich finds nicht. 😡

    Gruss Sven



    1. WM_CLOSE abfangen:
    void C...Dlg::OnClose() 
    {
      MessageBox("Dialog wird geschlossen.");	
      CDialog::OnClose();
    }
    

    funktioniert mit X, Alt+F4, Schließen

    1. Normalerweise minimiert das Fenster hierbei. Wenn Du das Abfangen willst, kannst Du z.B. WM_SIZE mit entsprechendem WPARAM abfangen:
      http://www.cpp-tutor.de/mfc/mfc/kap2/le9_3.htm
    void C...Dlg::OnSize(UINT nType, int cx, int cy) 
    {
      if( nType == SIZE_MINIMIZED) MessageBox("Minimiert");	
      CDialog::OnSize(nType, cx, cy);
    }
    

    Wenn Du das grundsätzliche Verhalten abändern willst, musst Du bei 1) z.B. CDialog::OnClose() verhindern.
    Willst Du das Minimieren verhindern, deaktivierst Du am besten die MINIMIZEBOX.


  • Mod

    Wir Erhard schon schreib, musst Du nur OnClose abfangen. Der Trick beseteht darin nicht die Basisklasse mit OnClose aufzurufen. Die führt irgendwann unweigerlich DestroyWindow auf und damit wird Dein Fenster geschlossen.

    Wenn das Fenster den Stil WS_MINIMIZEBOX hat dann musst Du normalerweise nichts mehr tun, den Rest macht die WinAPI wenn auf minieren geklickt wird.

    Hast Du evtl. einen WM_SYSCOMMAND Handler eingebaut, der SC_MINIMIZE abfängt oder die entsprechenden Befehle filtert?



  • Moin,

    ich glaube ich hab mich da falsch ausgedrückt. 😞

    Mein Programm soll wenn ich auf X und minimieren gehe, in den Systray verschwinden.

    Für das X klappt das schon indem ich die Nachricht WM_CLOSE abfange. Dadurch passiert das aber auch wenn ich alt+f4 drücke und im Systemmenü auf "Schließen" klicke. Da möchte ich aber das Prog ganz normal beenden können.

    Gruss Sven


  • Mod

    Dann musst Du WM_SYSCOMMAND behandeln und kanst dort SC_MINIMIZE und SC_SCLOSE selbst behandeln.
    Im Endeffekt bedeetet dass für SC_MINIMIZE, dass Du einen ShowWindow mit SW_HIDE durchführst und bei SC_SCLOSE einfach ein DestroyWindow.



  • Hi,

    das löst nicht mein Problem, dass mein Programm mit "Schliesen" und "alt+f4" auch in den systray verschwindet und nicht, wie gewünscht, beendet wird.

    Gruss Sven



  • Also ich hab mir das mal genauer Angeschaut und bin der Meinung: "DAS GEHT GAR NICHT" 😡

    Also hab ich "Schließen" und "Alt+F4" deaktiviert, und zum beenden des Programmes ein Menü eingefügt.

    Gruss Sven


  • Mod

    a.s.t_2003 schrieb:

    Also ich hab mir das mal genauer Angeschaut und bin der Meinung: "DAS GEHT GAR NICHT" 😡

    Also hab ich "Schließen" und "Alt+F4" deaktiviert, und zum beenden des Programmes ein Menü eingefügt.

    Es geht! Was geht den bei Dir nicht? Und wie hast Du es gemacht, dass es nicht geht?
    Zum Schließen Deines Programmes musst Du nur direkt WM_SYSCOMMAND Handler die entsprechende Aktion durchführen. In den meisten Fällen ein DestroyWindow.


Anmelden zum Antworten