我有一个DPI Aware应用程序(通过清单文件)和1监视器系统上所有以下方法返回错误的桌面分辨率:
我的显示器是4k,但我将桌面尺寸设置为1920x1080,比例为100%。在窗口模式下,通过所有方法报告的分辨率是正确的。但是当切换到全屏时,它们都返回1600x1200。如果是DPI意识问题,它至少应该保持纵横比,例如1600×900。
我注意到错误的结果是在调用IDXGISwapChain :: SetFullscreenState(true,output_device)之后,其中根据MSDN使用标志DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH创建交换链对象。
该应用程序正在使用DirectX 11。
有什么建议我的原因是什么?
谢谢
所以我发现问题 - IDXGISwapChain :: ResizeTarget(模式)需要在进入全屏之前调整大小的分辨率是错误的(由于之前的窗口模式具有自定义大小)。这导致IDXGISwapChain :: SetFullscreenState(true,output_device)切换到不同的奇怪桌面分辨率,具体取决于DX目标的大小。在更改状态之前,使用适当的桌面分辨率(通过EnumDisplaySettingsExA / ENUM_CURRENT_SETTINGS)设置目标解决了它。