【发布时间】:2019-03-08 12:25:50
【问题描述】:
我有一个 DPI Aware 应用程序(通过清单文件),并且在 1 个监视器系统上,以下所有方法都返回错误的桌面分辨率:
- GetSystemMetrics
- GetMonitorInfo
- GetWindowRect(GetDesktopWindow(), &desktop)
- EnumDisplaySettingsExA/ENUM_CURRENT_SETTINGS
- IDXGIOutput::GetDesc
我的显示器是 4k,但我将桌面尺寸设置为 1920x1080,比例为 100%。在窗口模式下,通过所有方法报告的分辨率都是正确的。但是,当切换到全屏时,它们都返回 1600x1200。如果是 DPI Aware 问题,它至少应该保持纵横比,例如1600x900。
我注意到错误的结果是在调用 IDXGISwapChain::SetFullscreenState(true, output_device) 之后根据 MSDN 使用标志 DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH 创建交换链对象。
该应用正在使用 DirectX 11。
有什么建议是我的原因吗?
谢谢
【问题讨论】:
-
您是否 100% 确定您的全屏分辨率与桌面分辨率匹配?一般情况下不是这样的……
-
可以假设这与 dpi 感知无关。有一个关于全屏问题的dedicated doc page 引用:“但是,许多应用程序会切换到首选的全屏分辨率。”
-
@rubenvb 是的,全屏分辨率有点偏离(由于从 Exclusive-Windowed-Exclusive 开始)导致无法正确调整应在 SetFullscreenState() 之前调用的 DX 目标的大小。
标签: winapi fullscreen resolution directx-11 dpi-aware