10

Tam ekranlı bir 3D oyun yazıyorum ve kullanıcının ekran kapasitesini donanım kapasitesine uyacak şekilde seçebileceği bir menü oluşturdum. Böyle EnumDisplaySettingsExA ileKodda kaydırma ve normal ekran modları arasında ayrım yapın - Windows

Ben numaralandırılırken am mevcut tüm ekran modları: Ben pan-modları yanı alıyorum

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

sorun var! Hangisini ayırt edemiyorum; Örneğin, ATI dizüstü bilgisayarım en fazla 1280x800 normal moda sahiptir, ancak aynı zamanda 1024x600'lük bir kaydırma modu da içerir!

Herkes 2'yi ayırt etmenin bir yolunu biliyor, böylece menümden panning modlarını reddedebilir miyim?

+2

BTW, DEVMODEA'nın dmPanningWidth ve Height alanları kullanışsızdır, her zaman 0'dır. –

+0

Panning modu ile ne demek istiyorsunuz? EnumDisplaySettingsEx, 1024x600 değerini döndürürse, bu, windows kullanıcısının video görüntüleme ayarlarını bu çözünürlüğe değiştirebileceği ve monitörün de bunu destekleyeceği anlamına gelir. –

+2

@Chris: Bu, genellikle çok büyük olduğu için ekran tarafından desteklenmeyen bir çözünürlüğü ifade eder, ancak ekran kartının yalnızca bir bölümünü ekranda gösteren grafik kartı tarafından taklit edilir; Fareyi ekranın kenarına taşımak, masaüstünün diğer bölümlerini göstermek için "kaydırır". –

cevap

1

@Martin: Bence OP sadece res'i yanlış sıraya koydu.

this link, neye bakıyorsunuz?

Windows'da bir ekranın piksel boyutlarını almanın doğru yolu gibi görünüyor.

+0

Bu bir .NET işlevidir. C++ için eşdeğer bulunamıyor ... –

+0

@Bill Kotsias - Bu işlev EnumDisplayMonitors, GetMonitorInfo veya MonitorForWindow gibi temel Windows monitörleri işlevlerini kullanır, ancak size yardımcı olacağından emin değilim. –

İlgili konular