SDI +MAXIMIZE



  • Hi Leute,

    ich habe eine SDI-Anwendung und möchte den druck auf den Maximizebutton abfangen.

    Ich habe gedacht, das geht in meinem
    CMainFrame::OnSize(UINT nType, int cx, int cy),
    aber wenn ich dort SIZE_MAXIMIZED abfange und für
    cx =800 cy =600 und für nType = 0 setze, maximiert er mir das Fenster dennoch auf die volle größe.

    Wie kann ich es schaffen, dass das Fenster dann nur in 800x600 angezeigt wird.

    void CMainFrame::OnSize(UINT nType, int cx, int cy)
    {
     if(nType == SIZE_MAXIMIZED)
     {
       cx = 800;
       cy = 600;
       nType =0;
     }
     CFrameWnd::OnSize(nType, cx, cy)
    }
    


  • Nur ein Tip, hab es selber nicht ausprobiert:
    Also ich denke mir, du musst die Message vorher abfangen mit OnSysCommand und dann die Message nicht an die Basisklasse weiterleiten und statt dessen ein MoveWindow mit deiner spezifizierten Grösse aufrufen.
    Bitte um Info, falls es klappt!



  • Also
    Es klappt ganz gut, aber !!!
    Ich fange also in OnSysCommand die nID SC_MAXIMIZE ab und führe dann die Funktion this->MoveWindow(0,0,800,600,true); aus.
    Und tada !! Das Fenster ist nur 800x600 groß.
    Nur leider ist oben in der Titelbar immer noch der MaximizeButton. Wie kann ich denn diesen jetzt ändern???



  • Hm, dann schick mal die Message erst an das Hauptfenster und ruf dann MoveWindow auf! Möglicherweise wird es dadurch erst gross und dann wieder klein.
    Dann musst Du wohl mit LockWindowUpdate bzw. SetRedraw arbeiten.



  • Jo werde ich dann nach dem WE wohl mal probieren, immerhin öffnet es sich jetzt erst einmal in 800x600.

    Vielen Dank soweit !



  • Vielleicht solltest Du 'nType' nicht auf 'SIZE_MAXIMIZED' gesetzt lassen, sondern entsprechend ändern (weiß grad nicht auswendig was man da nimmt)


Anmelden zum Antworten