Handle Laufzeitänderung von DPI (Textgröße) unter Windows 10

8

Unter Windows 10 muss das System nicht mehr neu gestartet werden (Abmeldung / Anmeldung), um DPI (Textgröße) zu ändern.

Meine Anwendung ist für eine solche Laufzeitänderung nicht bereit.

Wie informiert das System eine Anwendung darüber, dass sich die DPI ändert? Welche Nachricht sollte ich behandeln?

Ich benutze C ++ Builder, also suche ich nach einer reinen WinAPI-Lösung, keine WinForms.

    
Martin Prikryl 29.07.2015, 13:52
quelle

1 Antwort

8

Wie @TLama und @DalijaPrasnikar kommentiert , lautet die zu behandelnde Nachricht WM_DPICHANGED .

%Vor%

Die Nachricht ist seit Windows 8.1 verfügbar, wo sie an ein Fenster gesendet wird, wenn das Fenster auf einen anderen Monitor mit einer anderen DPI verschoben wird.

Unter Windows 10 ist die Laufzeitänderung von DPI aus Sicht der API identisch mit der Bewegung eines Fensters auf einen anderen Monitor mit unterschiedlicher DPI (außer natürlich, dass in diesem Fall das Fenster auf demselben Monitor bleibt) / p>

Um die Nachricht sogar zu empfangen (selbst für die Laufzeit-DPI-Änderung unter Windows 10), muss die Anwendung die Unterstützung für DPI pro Monitor deklarieren. Der bevorzugte Weg besteht darin, die Unterstützung in einem Anwendungsmanifest zu deklarieren , indem Sie% co_de setzen % to dpiAwareness (und zusätzlich PerMonitorV2 value und set PerMonitor auf dpiAware für die Abwärtskompatibilität mit älteren Windows 10 Builds und Windows 8.1):

%Vor%

Wenn die Anwendung DPI-Unterstützung pro Monitor deklariert, skaliert das System seine Fenster bei der DPI-Laufzeitänderung nicht pixelweise. Es liegt dann an der Anwendung, ihre Fenster nativ zu skalieren.

    
Martin Prikryl 29.07.2015, 17:08
quelle