0

我有一个 DPI Aware 应用程序(通过清单文件),并且在 1 个监视器系统上,以下所有方法都返回错误的桌面分辨率:

  • 获取系统指标
  • 获取监控信息
  • 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。

有什么建议是我的原因吗?

谢谢

4

1 回答 1

1

所以我发现了问题 - 在进入全屏之前需要调整大小的 IDXGISwapChain::ResizeTarget(mode) 分辨率错误(由于之前的窗口模式具有自定义大小)。这导致 IDXGISwapChain::SetFullscreenState(true, output_device) 根据 DX 目标的大小切换到不同的奇怪桌面分辨率。在更改状态之前使用适当的桌面分辨率设置目标(通过 EnumDisplaySettingsExA/ENUM_CURRENT_SETTINGS 获取)解决了它。

于 2019-03-08T18:25:39.520 回答