2014-07-23 87 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

不是我所知道的。只要確保你設置了分辨率。在過去,我編寫的遊戲設置了奇怪的分辨率,當他們崩潰時,你有一段時間回來。 : -/ –