2

我目前遇到了一个讨厌的小问题。我开发了一个将 DXGI 模式描述归零的应用程序。结构并调用 FindClosestMatchingMode() 来像宣传的那样“倾向于桌面分辨率”。

如果笔记本电脑完全在自己的显示器上运行,这很好用——只要我插入另一台显示器,它就会发疯。在我扩展我的桌面的情况下,它仍然可以正确获得笔记本电脑显示器的分辨率,但附加的显示器(运行 1080p)会产生 800*480 的偏好 :) (当然,穷人的 16:10,但是......)

对克隆/组合的监视器执行相同的操作(导致 1 个输出设备),即使它们的分辨率相同,也会产生相同的 800*480 废话。

是什么赋予了?有没有人可能找到一种方法来通过 DXGI 正确获取显示器的当前模式,或者找到一个完全不同但功能性的方法来解决这个问题的指针?

在 D3D9 的日子里生活更轻松 =)

- 更新

事实证明,与内部显示器相比,在属于外部显示器的 IDXGIOutput 实例上进行的任何 FindClosestMatchingMode() 调用的行为都不同(并且在大多数情况下是完全错误的),即使它们的原始分辨率相同。最重要的是,其他系统没有这个问题,但我无法绕过支持这台特定的笔记本电脑,包括它的驱动程序。

是时候进行一个好的旧设置对话框了。

4

1 回答 1

0

不是最好的解决方案,但由于我被限制在这些确切的机器上,我决定通过 GetSystemMetrics() (SM_CXSCREEN/SM_CYSCREEN) 获取显示器的当前分辨率,这无疑只适用于主显示器,但还有其他方法,并将此分辨率提供给提供给 FindClosestMatchingMode() 的 ModeToMatch 结构。

然后它会选择正确的(桌面)分辨率。

当然,更好的答案是非常受欢迎的;)

于 2013-04-22T20:25:42.607 回答