我有一个应用程序,它是来自 Windows 8.1 的 PROCESS_PER_MONITOR_DPI_AWARE 和来自 Windows 10 v1703 的 DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2。我的窗口在窗口模式下具有 WS_OVERLAPPEDWINDOW 样式,并且在全屏时我将它们切换为监视器大小的 WS_POPUP。
当我在同一台显示器上更改 DPI 时,窗口模式窗口会在 Windows 8.1 和 Windows 10 v1703 上的 WM_DPICHANGED 消息中获得正确缩放的窗口大小。但是,当全屏显示时,Windows 8.1 不会调整全屏窗口的大小(它保持相同的尺寸),但 Windows 10 v1703 会。这意味着 96 dpi 的 2560x1440 全屏窗口在转到 144 dpi 时在 Windows 8.1 上保持 2560x1440,但在 Windows 10 v1703 上调整为 3840x2160。
这是正常的,即保持全屏窗口的大小相同,我现在应该在收到 WM_GETDPISCALEDSIZE 消息时手动执行此操作,而这在 Windows 8.1 上是自动完成的?
编辑:经过进一步测试,如果窗口是全屏的,WM_GETDPISCALEDSIZE 消息似乎甚至不会被发送,只有当它被窗口化时(WS_POPUP 有效,但仅当大小与监视器不同时)。因此,我什至无法覆盖此行为,并且 Windows 8.1 的工作方式与 Windows 10 v1703 的全屏窗口不同。