gpt4 book ai didi

winapi - Windows 10,DPI 缩放和全屏

转载 作者:行者123 更新时间:2023-12-05 07:39:33 25 4
gpt4 key购买 nike

我有一个应用程序,它是来自 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 全屏窗口在 Windows 8.1 上保持 2560x1440,例如 144 dpi,但在 Windows 10 v1703 上调整为 3840x2160。

这是否正常,即保持全屏窗口大小与我现在应该在收到 WM_GETDPISCALEDSIZE 消息时手动执行的操作相同,这在 Windows 8.1 上是自动完成的?

编辑:经过进一步测试,如果窗口是全屏,WM_GETDPISCALEDSIZE 消息似乎甚至不会被发送,只有当它是窗口化时(WS_POPUP 有效,但仅当大小与显示器不同时)。因此,我什至无法覆盖此行为,对于全屏窗口,Windows 8.1 与 Windows 10 v1703 的工作方式不同。

最佳答案

试试这个:

void ShowFullScreen(HWND hwnd)
{
LONG exStyle = ::GetWindowLong(hwnd, GWL_EXSTYLE);
LONG style = ::GetWindowLong(hwnd, GWL_STYLE);

::SetWindowLong(hwnd, GWL_STYLE,
(style & ~WS_OVERLAPPEDWINDOW) | WS_POPUPWINDOW);
::SetWindowLong(hwnd, GWL_EXSTYLE, exStyle | WS_EX_TOPMOST);
::ShowWindow(hwnd, SW_SHOWMAXIMIZED);
}

是否有助于解决W8.1上的问题?

关于winapi - Windows 10,DPI 缩放和全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47019924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com