2014-07-23 49 views
2

我正在寻找获取所有支持的分辨率的方法。获取所有支持的屏幕分辨率

搜索这里一些解决方案后,我得到这个代码的工作:

#include "Windows.h" 
#include <Windows.h> 
#include <iostream> 


using namespace std; 

int main() 
{ 
    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; 
    } 
int age; 
cin>>age; 

}

我有2个问题与此代码:

  1. 当运行它,我得到的相同的分辨率一遍又一遍。 例如:Mode0,Mode1,Mode2 ..... Mode17都是:320x200

  2. 当使用Gui并查看可用分辨率时,我没有320x200作为选项。我看到我的计算机支持600×800和上,但运行这个小exe文件时,我也看到了400×300,320×240等。

谁能帮助和建议吗? 谢谢!

+0

不要忘记频率。 – chris

+0

你是什么意思的频率? – user1386966

+2

可以在不同模式下以相同分辨率合理变化的其他字段:'dmDisplayOrientation','dmDisplayFixedOutput','dmDisplayFlags' – MSalters

回答

3

您的代码工作正常。关于你的两个问题:

  1. 有多种显示模式具有相同的分辨率。它们可能在其他方面有所不同,例如颜色深度,频率或隔行扫描。
  2. Windows GUI根本不允许您将分辨率或颜色深度设置为低于一定值。对于Windows 9x,它是640x480和16种颜色。现在它是800x600。这仅仅是因为Windows用户界面在特定大小以下不起作用。你甚至无法看到这个信息,询问解析是否奏效!此外,GUI只能返回与您的显示器的纵横比相匹配的分辨率。

编辑:所谓“频率”是指“刷新率”

+0

可以确认。已经测试过320x200,这并不好玩。事实上,这是第一次很有趣。 – chris

+0

非常感谢!有没有办法让GUI只支持GUI?我想运行一个小测试,将尝试所有可能的分辨率 – user1386966

+0

不是我所知道的。只要确保你设置了分辨率。在过去,我编写的游戏设置了奇怪的分辨率,当他们崩溃时,你有一段时间回来。 : -/ –