DXGI:尝试从输出(显示器)获得正确的显示模式

时间:2013-04-22 15:45:30

标签: direct3d dxgi

我目前陷入一个讨厌的小问题。我开发了一个应用程序,它将DXGI模式描述为零。结构并调用FindClosestMatchingMode(),正如所宣传的那样,“倾向于桌面解析”。

如果笔记本电脑完全在他们自己的显示器上运行,这种方法很好 - 只要我插入另一台显示器,它就会疯狂。在扩展我的桌面的情况下,它仍将正确地获得笔记本电脑的显示器分辨率,但附加的(运行1080p)将产生800 * 480的优先选择:)(当然,穷人的16:10,但是......)< / p>

对克隆/组合的监视器(导致1个输出设备)做同样的事情,即使它们的分辨率相等,也会给出相同的800 * 480废话。

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

生活在D3D9天更容易回归=)

- 更新

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

一个良好的旧设置对话框的时间。

1 个答案:

答案 0 :(得分:0)

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

然后确定正确的(桌面)分辨率。

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