Ich habe Probleme beim Erstellen eines Clientbereichs mit einer festgelegten Größe. AdjustWindowRect () wird nicht richtig funktionieren, also entschied ich mich, manuell die Breite und Höhe des Fensters zu berechnen.
Das hat auch nicht funktioniert und ich habe mich gefragt, warum ich die Werte überprüft habe, die ich für die Grenzen usw. verwendet habe.
%Vor%Das gibt mir:
%Vor%Ich bin ziemlich sicher, dass die Grenzen meines Fensters nicht so dünn sind. Was mache ich falsch?
EDIT 1:
Anfangs verwendete mein Fenster den WS_OVERLAPPED-Stil. Da der AdjustWindowRect nicht zulässt, dass dieser Stil verwendet wird, habe ich den gleichen Fenstertyp erstellt, den ich wollte: (WS_BORDER | WS_CAPTION | WS_SYSMENU). Dies ist der gleiche Stil, den ich während des Aufrufs von AdjustWindowRect und AdjustWindowRectEx verwende (dieser mit NULL als erweitertem Stil, da ich keinen verwende). Dies gibt mir die richtige Breite, aber die Höhe fehlt ein paar Pixel.
%Vor%Das gibt mir 800 Pixel breiten Client-Bereich aber nur 582 Pixel Höhe.
EDIT 2:
CURIOUS, Ich habe GetClientRect (); und es gab mir, dass die Breite 800 ist und die Höhe IS 600. Wie kommt es, dass es nicht richtig angezeigt wird?
Es scheint, dass wenn ich das ganze Fenster gemalt habe, alles gemessen hat. Der Grund? Ich weiß es nicht.
Vielleicht kann jemand anderes etwas Licht darüber werfen.
Das erste Problem ist, dass Sie die falsche Metrik verwenden. Sie müssen SM_CXSIZEFRAME verwenden, um die Breite eines veränderbaren Rahmens zu erhalten.
Das zweite Problem ist, dass Windows Ihnen den richtigen Wert nicht geben wird. Die fetten Ränder eines Fensters auf Aero sind ein ernsthaftes Appcompat-Problem. Windows liegt absichtlich über das Fensterrechteck und die Rahmengröße. Damit ältere Programme weiterhin ordnungsgemäß funktionieren können, geben sie die Größe des Fensters im CreateWindow () - Aufruf an. Aber das ist die Größe des Rahmens, einschließlich der Grenzen. Ohne die Lüge würde das Fenster mit einem Client-Bereich enden, der zu klein ist.
Um die Lüge zu deaktivieren, müssen Sie Windows mitteilen, dass Sie über das Aero-Verhalten Bescheid wissen und nicht belogen werden müssen. Projekt + Eigenschaften, Linker, Kommandozeile, Zusätzliche Optionen und fügen hinzu:
%Vor%Version 6.0 ist die Vista-Versionsnummer, die erste Version von Windows mit Aero. Beachten Sie, dass Ihr Programm nicht mehr auf XP läuft, wenn Sie dies tun.
Haben Sie AdjustWindowRectEx () anstelle von AdjustWindowRect () versucht? Solange Sie die richtigen Stile (und erweiterte Stile) übergeben, gibt es keinen Grund, warum ich weiß, dass das nicht richtig funktioniert.