DXGI:尝试从输出(监视器)中获取正确的显示模式

3
我目前遇到了一个麻烦的小问题。我开发了一个应用程序,将DXGI模式描述结构归零,并调用FindClosestMatchingMode(),如广告所述,“朝向桌面分辨率”。如果笔记本电脑完全在自己的显示器上运行,这很好用--但只要我插入另一台显示器,它就会失控。如果我扩展我的桌面,它仍然会正确地获取笔记本电脑的分辨率,但附加的显示器(运行1080p)将会偏爱800 * 480 :)(当然,是穷人的16:10,但...)。即使它们的分辨率相同,使用克隆/组合的监视器进行相同的操作(结果为1个输出设备)也会产生相同的800 * 480垃圾。怎么回事?是否有人找到了通过DXGI正确获取显示器当前模式或指针的方法,以解决此问题?D3D9时代更容易些 =) - 更新:事实证明,任何在外部显示器上属于IDXGIOutput实例的FindClosestMatchingMode()调用都会与内部显示器不同(在大多数情况下是错误的),即使它们的本机分辨率相同。最重要的是,其他系统没有这个问题,但我无法绕过支持这个特定的笔记本电脑,包括它的驱动程序。是时候进行一个好的设置对话框了。
1个回答

0

虽然这不是最好的解决方案,但由于我受限于这些特定的机器,所以我选择使用GetSystemMetrics()函数(SM_CXSCREEN/SM_CYSCREEN)来获取显示器的当前分辨率。尽管这只适用于主显示器,但还有其他方法可以解决这个问题,并将此分辨率传递给ModeToMatch结构体,然后传递给FindClosestMatchingMode()函数。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接