Als @TLama und @DalijaPrasnikar commented ist die zu bearbeitende Nachricht .
#define WM_DPICHANGED 0x02E0
Die Botschaft ist seit Windows 8.1 zur Verfügung, wo sie an ein Fenster gesendet wird, wenn das Fenster auf einem anderen Monitor mit einem anderen DPI bewegt wird.
Unter Windows 10 ist die Laufzeitänderung von DPI aus Sicht der API identisch mit dem Verschieben eines Fensters auf einen anderen Monitor mit anderer DPI (außer natürlich, dass in diesem Fall das Fenster auf demselben Monitor bleibt).
Um die Nachricht sogar zu empfangen (selbst für Laufzeit-DPI-Änderung unter Windows 10), muss die Anwendung die Unterstützung für DPI pro Monitor deklarieren. Der bevorzugte Weg ist, um declare the support in an application manifest von dpiAwareness
-PerMonitorV2
Einstellung (und zusätzlichen PerMonitor
Wert und setzte dpiAware
zu True/PM
für die Abwärtskompatibilität mit älteren Windows-10 baut und Windows 8.1):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
...
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
Wenn die Anwendung pro-Monitor erklärt DPI Unterstützung , wird das System seine Fenster beim DPI-Laufzeitwechsel nicht pixelweise skalieren. Es liegt dann an der Anwendung, ihre Fenster nativ zu skalieren.
Kommentare sind nicht für längere Diskussion; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/84692/discussion-on-question-by-martin-prikryl-handle-runtime-change-of-dpi-text-size) . –