Jako @TLama i @DalijaPrasnikar commented, wiadomość do obsługi to WM_DPICHANGED
.
#define WM_DPICHANGED 0x02E0
Komunikat jest dostępny od wersji Windows 8.1, gdzie jest wysyłany do okna, gdy okno jest przenoszone do innego monitora z innym DPI.
W systemie Windows 10 zmiana środowiska wykonawczego DPI jest, z punktu widzenia interfejsu API, identyczna jak w przypadku ruchu okna do innego monitora z inną rozdzielczością DPI (z wyjątkiem oczywiście, że okno pozostaje na tym samym monitorze).
Aby otrzymać komunikat (nawet w przypadku zmiany czasu wykonywania w systemie Windows 10), aplikacja musi zadeklarować obsługę DPI dla jednego monitora. Preferowanym sposobem jest declare the support in an application manifest ustawiając dpiAwareness
do PerMonitorV2
(i dodatkową wartość PerMonitor
i ustawić dpiAware
do True/PM
dla wstecznej kompatybilności ze starszym systemem Windows 10 buduje i 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>
Gdy aplikacja deklaruje wsparcie per-monitorze DPI , system nie będzie skalować okien w pikselach przy zmianie środowiska wykonawczego DPI. To zależy od aplikacji, aby skalować okna natywnie.
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została [przeniesiona na czat] (http://chat.stackoverflow.com/rooms/84692/discussion-on-question-by-martin-prikryl-handle-runtime-change-of-dpi-text-size) . –