[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
    


  • 800x578
    

    Windows 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?


  • Mod

    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


Anmelden zum Antworten