Ich bin auf ein interessantes Problem gestoßen. Mindestens in Vista gibt getSystemMetrics (SM_CXSCREEN) einen falschen Wert zurück, wenn die Desktop-DPI-Einstellungen nicht auf 100% gesetzt sind. Zum Beispiel habe ich versucht, 150% in einem 1366 x 768-Bildschirm und getSystemMetrics () gibt 911 statt 1366 (und 1366 / 1,5 bis 911)
Nach dem MSDN gibt getSystemMetrics (SM_CXSCREEN) Pixel zurück, daher dachte ich, dass dieser Wert nicht von den DPI-Einstellungen beeinflusst wird - aber das ist es. Gibt es also einen sichereren Weg, die wahre, unskalierte Bildschirmauflösung herauszufinden?
Ein Programm muss dem Betriebssystem mitteilen, dass es DPI-fähig ist, um die wahre Auflösung zu erhalten, wenn Sie 125% überschreiten. Dies wird am besten mit einem Manifest durchgeführt, wie in diesem MSDN Library-Artikel erläutert .
Bevor Sie die richtigen Pixelmetriken von Funktionen wie GetSystemMetrics oder GetClientRect erhalten, muss Ihre App dem Betriebssystem mitteilen, dass es über DPI Bescheid weiß und daher nicht alles vermasseln wird.
Es hat einige Änderungen gegeben, wie dies empfohlen wird. Weitere Informationen finden Sie in den MSDN-Dokumenten.
Ab Windows 10:
%Vor%Oder ab Windows 8.1:
%Vor%Oder ab Vista:
%Vor%Nach dem Aufruf sollte die Funktion GetSystemMetrics usw. die richtigen Werte in Pixel an Ihre App zurückgeben.
Tags und Links screen-resolution winapi dpi