GetSystemMetrics () gibt den falschen Wert für SM_CXSCREEN zurück

8

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?

    
ggambett 13.04.2010, 14:36
quelle

3 Antworten

10

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 .

    
Hans Passant 13.04.2010, 14:53
quelle
5

Um Ihre Anwendung auf dpi make und manifest Datei aufmerksam zu machen und den folgenden Text einzufügen.

%Vor%     
Asad Khan 19.06.2011 01:36
quelle
1

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.

    
Toby Sharp 15.12.2016 08:31
quelle

Tags und Links