C++找出显卡支持的分辨率

The*_*ude 9 c++ windows winapi resolution qt4

我正在写一个小程序让我来回切换我的分辨率,因为我的投影机无法处理与我的屏幕相同的分辨率.我已经知道如何使用Windows API设置屏幕分辨率.以及使用Windows API或QT4工具包读取当前分辨率.我的问题是我想要一个屏幕和显卡支持的所有不同分辨率的菜单.这个程序将被分发,所以我需要程序实际与图形卡通信,以找出它支持的内容.我想要使​​用的唯一API是Windows API或QT4工具包,但我不认为QT4会这样做,除非您以奇怪的方式使用图形小部件.

我很确定使用WINDOWS API可以实现这一点.我只是不知道该怎么做.

哦,请给我一些懈怠,我熟悉QT4和C++,但我通常是一名Linux程序员,我正在为别人写这篇文章.我对Windows API做过的唯一事情就是创建一个消息框,设置背景,并使用系统变量.所以请简单解释一下这个过程.请不要只发布msdn的链接,我讨厌他们的文档,我讨厌微软.我一年两次使用Windows.

Mer*_*OWA 17

在一般情况下,以下应该适合您

DEVMODE dm = { 0 };
dm.dmSize = sizeof(dm);
for( int iModeNum = 0; EnumDisplaySettings( NULL, iModeNum, &dm ) != 0; iModeNum++ ) {
  cout << "Mode #" << iModeNum << " = " << dm.dmPelsWidth << "x" << dm.dmPelsHeight << endl;
  }
Run Code Online (Sandbox Code Playgroud)

这应该打印出运行.exe的当前显示上的所有支持的分辨率.假设您没有处理多显示器图形卡,这应该可行.否则,您必须在每个显示器上使用EnumDisplayDevices循环.

一旦你弄清楚你想要什么分辨率,你可以使用'ChangeDisplaySettingsEx'将显示更改为你想要的模式.

使用DirectX是可能的,但我不推荐它,因为代码更复杂(必须初始化DirectX和使用COM指针),除非你打算实际使用DirectX不仅仅是确定显示分辨率.