[gelöst] Fenstergröße an Zeichenbereich anpassen
-
Hi Leute!
Ich versuche ein Fenster zu erzeugen, wo nicht die Gesamtgröße sondern die Größe des Zeichenbereichs entscheidend ist.
Ich habe die Funktion AdjusWindowRect gefunden, aber die funtkioniert nicht. Zumindest nicht unter Vista.
für 800x600 erhalte ich am Ende 792x572, ohne AWR: 784x564.
Ich will aber auch nicht einfach 16x36 hinzuaddieren, weil das dann nur für Vista gilt.Der WindowStyle ist WS_OVERLAPPEDWINDOW|WS_VISIBLE, es gibt kein Menü.
Mit der Funktion GetSystem Metrics müsste ich doch alle nötigen Werte berechnen können, aber welche brauch ich für was?
Kennt sich einer von Euch damit aus?
Ich bräuchte eine Funktion die die Fenstergröße zuverlässig anpasst, egal welche Windows-Version (ab 2000).
-
Könnt ihr bitte mal alle dieses Programm testen und sagen was es ausspuckt?
Bitte auch euer OS angeben, damit ich weiß, dass es nicht nur unter Vista funktioniert.//erledigt
-
800x578Windows Xp Service Pack 3.
MFG
-
Gut, könnten bitte noch mehr das Program testen.
Ich werde AdjustStandardWindowRect aktualisieren, wenn ich etwas besseres gefunden habe.Hat keiner sowas schonmal gemacht?
-
Durch AdjustWindowRect wird auch die Taskbar berücksictigt.
Wenn Du schon GetSystemMetrics gefunden hast, dann schau Dir mal SM_CXFULLSCREEN und SM_CYFULLSCREEN an. Wie auch SystemParametersInfo mir SPI_GETWORKAREA.BTW: Was ist das für ein UI Programm ohne WinMain?
Evtl. solltest Du noch mal ein paar andere Basics über Windows Programmierung lesen.
-
Problem gelöst!
void AdjustStandardWindowRect(HWND hWindow, RECT& WindowSizeRect) { //Außen- und Innenrahmen RECT WindowRect, ClientRect; //Erstmal klein zum testen MoveWindow(hWindow, 0, 0, 400, 300, FALSE); //Maße holen GetWindowRect(hWindow, &WindowRect); GetClientRect(hWindow, &ClientRect); //Größe anpassen WindowSizeRect.right += WindowRect.right - ClientRect.right; WindowSizeRect.bottom+= WindowRect.bottom - ClientRect.bottom; //Positin an Größe anpassen WindowSizeRect.left = GetSystemMetrics(SM_CXSCREEN)/2 - WindowSizeRect.right /2; WindowSizeRect.top = GetSystemMetrics(SM_CYSCREEN)/2 - WindowSizeRect.bottom/2; //Fenster neue Größe geben MoveWindow(hWindow, WindowSizeRect.left, WindowSizeRect.top, WindowSizeRect.right, WindowSizeRect.bottom, FALSE); }Also dieses Testprogramm war nur mal schnell aus nem anderen Programm kopiert, deshalb auch die schlechte Fehler-Behandlung.
Darüber haben sich schon viele beschwert. Über Stil lässt sich streiten.Im Original sieht das aber besser aus, Kommentare, Exceptions, Log, etc.
UI? Konsole, musste eben schnell gehen.

Zum Thema Basics über Windows Programmierung: habe Petzold gelesen