Fenstergröße ändern



  • Hi, wie kann man denn die Fenstergröße einer Win32-Anwendung ändern wenn das Fenster bereits existiert?
    MoveWindow klappt zwar soweit allerdings stimmt die Fenstergröße nicht ganz. Es scheint als würde bei dieser Funktion auch der äußere Rand des Fensters miteinberechnet.



  • Spongebob schrieb:

    Es scheint als würde bei dieser Funktion auch der äußere Rand des Fensters miteinberechnet.

    Genau so ist es auch.

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms632665.aspx



  • Die AdjustRectEx-Funktion habe ich natürlich auch schon getestet, allerdings ändert diese an der Größe des Fensters nichts.


  • Mod

    Erst AdjustRectEx ausführen und die äußere Größe errechnen, dann MoveWindow...
    So schwer?



  • @ Herr Richter
    Wenn das so einfach ist dann erklär mir mal warum folgender Code nur ein Fenter mit einer Width=1008 und Height=732 anstatt der 1024 und 768 zur Folge hat.

    RECT windowRect;
    	windowRect.bottom = 768 + 100;
    	windowRect.left = 100;
    	windowRect.right = 1024 + 100;
    	windowRect.top = 100;
    	AdjustWindowRectEx(&windowRect, GetWindowLong(hWnd, GWL_STYLE), (GetMenu(hWnd) != nullptr), GetWindowLong(hWnd, GWL_EXSTYLE));
    	MoveWindow(hWnd, windowRect.left, windowRect.top, 1024, 768, false);
    


  • Wofür genau ist der Aufruf von AdjustWindowRectEx() in dem Code? Der Code macht genau das, nämlich das Fenster auf eine Breite von 1024 und eine Höhe von 768 setzen. Das Problem ist, dass das was du dem Computer anschaffst, nicht das ist, was du willst. Schau dir nochmal an, was genau der Sinn von AdjustWindowRectEx() ist.



  • Ok, habe den Fehler jetzt gefunden. Nicht AdjustWindowRectEx sondern MoveWindow habe ich falsch verwendet. Denn Width und Height sind hier auch inkl. Fensterrand anzugeben. Hiermit geht es jetzt:

    MoveWindow(hWnd, windowRect.left, windowRect.top, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top, false);
    

Anmelden zum Antworten