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.
Wie @TLama und @DalijaPrasnikar kommentiert , lautet die zu behandelnde Nachricht WM_DPICHANGED
.
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):
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.
Tags und Links delphi winapi windows-10 c++builder dpi