10

我正在寫一個全屏3D遊戲,並且我創建了一個菜單,用戶可以在其中選擇屏幕分辨率以匹配其硬件容量。區分平移和正常屏幕模式代碼 - Windows

我枚舉所有可用的屏幕模式與EnumDisplaySettingsExA這樣的:

std::vector<DEVMODEA> modes; 
DEVMODEA modeInfo; 
int modeNum = -1; 
while (EnumDisplaySettingsExA(0, ++modeNum, &modeInfo, 0)) { 
    if (modeInfo.dmBitsPerPel < 16) continue; 
    modes.push_back(modeInfo); 
} 

問題是,我得到搖攝模​​式以及!我無法區分哪些是哪些;例如我的ATI筆記本電腦的最大正常模式爲1280x800,但也包含1024x600的平移模式!

任何人都知道區分2的方法,所以我可以拒絕我的菜單中的平移模式?

+2

順便說一下,DEVMODEA的dmPanningWidth和Height字段是無用的,它們總是返回0. – 2010-07-23 09:49:57

+0

平移模式是什麼意思?當EnumDisplaySettingsEx返回1024x600時,這意味着Windows用戶可以將視頻顯示設置更改爲該分辨率,並且顯示器也可能支持該分辨率。 – 2011-02-02 18:28:22

+2

@Chris:它指的是顯示器不支持的分辨率,通常是因爲顯示器太大,但通過顯卡一次僅顯示桌面的一部分在顯卡上進行模擬;將鼠標移動到屏幕邊緣將「平移」它以顯示桌面的其他部分。 – 2011-02-02 18:35:16

回答

1

@Martin:我猜OP只是把res的順序放錯了。

this link關於你在找什麼?

它看起來像是在Windows中獲取屏幕像素尺寸的正確方法。

+0

這是一個.NET函數。找不到相當於C++ ... – 2011-02-10 06:58:32

+0

@ Bill Kotsias - 此函數使用底層的Windows監視器函數,例如EnumDisplayMonitors,GetMonitorInfo或MonitorForWindow,但我不確定它會對您有所幫助。 – 2011-02-10 08:49:47