PROCESS_DPI_AWARENESS-Enumeration (shellscalingapi.h)
Identifiziert dpi-Werte (Dots per Inch). DPI-Bewusstsein gibt an, wie viel Skalierungsarbeit eine Anwendung für DPI ausführt und wie viel vom System geleistet wird.
Benutzer haben die Möglichkeit, den DPI-Skalierungsfaktor auf ihren Displays unabhängig voneinander festzulegen. Einige Legacyanwendungen können ihre Skalierung nicht für mehrere DPI-Einstellungen anpassen. Damit Benutzer diese Anwendungen verwenden können, ohne dass Inhalte auf Bildschirmen zu groß oder klein erscheinen, kann Windows dpi-Virtualisierung auf eine Anwendung anwenden, sodass diese automatisch vom System skaliert wird, um dem DPI der aktuellen Anzeige zu entsprechen. Der wert PROCESS_DPI_AWARENESS gibt an, welche Skalierungsebene Ihre Anwendung selbst verarbeitet und wie viel von Windows bereitgestellt wird. Beachten Sie, dass vom System skalierte Anwendungen möglicherweise verschwommen erscheinen und virtualisierte Daten über den Monitor lesen, um die Kompatibilität zu gewährleisten.
Syntax
typedef enum PROCESS_DPI_AWARENESS {
PROCESS_DPI_UNAWARE = 0,
PROCESS_SYSTEM_DPI_AWARE = 1,
PROCESS_PER_MONITOR_DPI_AWARE = 2
} ;
Konstanten
PROCESS_DPI_UNAWARE Wert: 0 DPI nicht bekannt. Diese App skaliert nicht für DPI-Änderungen und wird immer angenommen, dass sie einen Skalierungsfaktor von 100 % (96 DPI) aufweist. Es wird automatisch vom System für jede andere DPI-Einstellung skaliert. |
PROCESS_SYSTEM_DPI_AWARE Wert: 1 System-DPI-fähig. Diese App skaliert nicht für DPI-Änderungen. Sie fragt einmal nach dem DPI ab und verwendet diesen Wert für die Lebensdauer der App. Wenn sich der DPI ändert, passt sich die App nicht an den neuen DPI-Wert an. Es wird automatisch vom System hoch- oder herunterskaliert, wenn sich der DPI vom Systemwert ändert. |
PROCESS_PER_MONITOR_DPI_AWARE Wert: 2 Pro Monitor dpi-fähig. Diese App überprüft den DPI-Wert beim Erstellen und passt den Skalierungsfaktor an, wenn sich der DPI ändert. Diese Anwendungen werden nicht automatisch vom System skaliert. |
Hinweise
In früheren Versionen von Windows mussten Sie die DPI-Sensibilisierung für die gesamte Anwendung festlegen. Die DPI-Wahrnehmung ist nun an einzelne Threads, Prozesse oder Fenster gebunden. Dies bedeutet, dass sich die DPI-Wahrnehmung ändern kann, während die App ausgeführt wird, und dass mehrere Fenster über eigene unabhängige DPI-Bewusstseinswerte verfügen können. Weitere Informationen zur aktuellen DPI-Sensibilisierung finden Sie unter DPI_AWARENESS . Die folgenden Empfehlungen zum Festlegen der DPI-Sensibilisierung im Anwendungsmanifest werden weiterhin unterstützt, aber die aktuelle Empfehlung besteht darin, die DPI_AWARENESS_CONTEXT zu verwenden.
Wenn Ihre App PROCESS_DPI_UNAWARE ist, müssen Sie keinen Wert im Anwendungsmanifest festlegen. PROCESS_DPI_UNAWARE ist der Standardwert für Apps, es sei denn, es wird ein anderer Wert angegeben.
In früheren Versionen von Windows gab es keine Einstellung für PROCESS_PER_MONITOR_DPI_AWARE. Apps waren entweder DPI nicht bekannt oder DPI-fähig. Legacyanwendungen, die vor Windows 8.1 als DPI-fähig klassifiziert wurden, gelten als PROCESS_DPI_AWARENESS Einstellung vonPROCESS_SYSTEM_DPI_AWARE in aktuellen Windows-Versionen.
Eine Anwendung, die PROCESS_DPI_UNAWARE ist, verwendet immer einen Skalierungsfaktor von 100 % (96 DPI). In diesem Szenario wird ein PROCESS_DPI_UNAWARE Fenster mit einer Größe von 500 x 500 erstellt. In Anzeige A wird es nativ ohne Skalierung gerendert. Auf den Displays B und C wird sie vom System automatisch um den Faktor 2 bzw. 3 hochskaliert. Dies liegt daran, dass ein PROCESS_DPI_UNAWARE immer von einem DPI von 96 ausgeht, und das System dies übernimmt. Wenn die App die Fenstergröße abfragt, erhält sie immer den Wert 500 x 500, unabhängig davon, in welcher Anzeige sie sich befindet. Wenn diese App nach dem DPI eines der drei Monitore fragt, erhält sie 96.
Betrachten Sie nun eine Anwendung, die PROCESS_SYSTEM_DPI_AWARE ist. Denken Sie daran, dass im Beispiel der System-DPI 200 % oder 192 DPI beträgt. Dies bedeutet, dass alle von dieser App erstellten Fenster nativ auf Display B gerendert werden. Das Fenster verschiebt sich, um A anzuzeigen, es wird automatisch um den Faktor 2 herunterskaliert. Dies liegt daran, dass eine PROCESS_SYSTEM_DPI_AWARE-App in diesem Szenario davon ausgeht, dass der DPI immer 192 beträgt. Beim Start wird der DPI-Wert abfragt und dann nie geändert. Dies wird vom System berücksichtigt, indem es automatisch herunterskaliert wird, wenn das Fenster zur Anzeige C wechselt. Ebenso wird das System automatisch um den Faktor 1,5 hochskaliert. Wenn die App die Fenstergröße abfragt, erhält sie immer den gleichen Wert, ähnlich wie PROCESS_DPI_UNAWARE. Wenn er nach dem DPI eines der drei Monitore fragt, erhält er 192.
Im Gegensatz zu den anderen Bewusstseinswerten sollte sich PROCESS_PER_MONITOR_DPI_AWARE an die Anzeige anpassen, auf der sie sich befindet. Dies bedeutet, dass sie immer nativ gerendert und nie vom System skaliert wird. Die App ist dafür verantwortlich, den Skalierungsfaktor beim Empfang der WM_DPICHANGED Nachricht anzupassen. Ein Teil dieser Nachricht enthält ein vorgeschlagenes Rect für das Fenster. Dieser Vorschlag ist das aktuelle Fenster, das vom alten DPI-Wert auf den neuen DPI-Wert skaliert wird. Beispielsweise erhält ein Fenster, das auf Anzeige A 500 x 500 ist und in Anzeige B verschoben wird, ein vorgeschlagenes Fensterrekt, das 1000 mal 1000 ist. Wenn dasselbe Fenster verschoben wird, um C anzuzeigen, ist das vorgeschlagene Fensterrecht, das an WM_DPICHANGED angefügt ist, 1500 x 1500. Außerdem erhält diese App beim Abfragen nach der Fenstergröße immer den tatsächlichen nativen Wert. Wenn sie nach dem DPI eines der drei Monitore fragt, erhält sie 96, 192 bzw. 288.
Wenn eine Anwendung eine andere Anwendung mit einer anderen Bewusstseinsebene für DPI-abhängige Informationen abfragt, skaliert das System die Werte aufgrund der DPI-Virtualisierung automatisch so, dass sie dem Bekanntheitsgrad des Aufrufers entsprechen. Ein Beispiel hierfür ist, wenn Sie GetWindowRect aufrufen und ein fenster übergeben, das von einer anderen Anwendung erstellt wurde. Gehen Sie bei verwendung der oben beschriebenen Situation davon aus, dass eine PROCESS_DPI_UNAWARE-App ein Fenster von 500 x 500 auf Display C erstellt hat. Wenn Sie das Fenster-Rect von einer anderen Anwendung abfragen, variiert die Größe des Rect je nach DPI-Bewusstsein Ihrer App.
PROCESS_DPI_UNAWARE | Sie erhalten ein Rect von 500 x 500, da das System einen DPI von 96 annimmt und das tatsächliche Rect automatisch um den Faktor 3 herunterskaliert. |
PROCESS_SYSTEM_DPI_AWARE | Sie erhalten einen Rect von 1000 mal 1000, da das System von einem DPI von 192 ausgeht und das tatsächliche Rect automatisch um den Faktor 3/2 herunterskaliert. |
PROCESS_PER_MONITOR_DPI_AWARE | Sie erhalten eine 1500 x 1500 Rect, da das System den tatsächlichen DPI des Displays verwendet und keine Skalierung im Hintergrund vor nimmt. |
Beispiele
Dieser Codeausschnitt veranschaulicht, wie Sie einen Wert von PROCESS_SYSTEM_DPI_AWARE in Ihrem Anwendungsmanifest festlegen.
<dpiAware>true</dpiAware>
Dieser Codeausschnitt veranschaulicht, wie Sie einen Wert von PROCESS_PER_MONITOR_DPI_AWARE in Ihrem Anwendungsmanifest festlegen.
<dpiAware>true/PM</dpiAware>
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 8.1 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2012 R2 [nur Desktop-Apps] |
Kopfzeile | shellscalingapi.h |