2010-11-03 12 views
10

sto scrivendo un piccolo programma per farmi passare la mia risoluzione avanti e indietro, perché il proiettore non può gestire la stessa risoluzione il mio schermo. So già come impostare la risoluzione dello schermo utilizzando l'API di Windows. Oltre a leggere la risoluzione corrente utilizzando l'API di Windows o il toolkit QT4. Il mio problema è che voglio un menu di tutte le diverse risoluzioni supportate dallo schermo e dalla scheda grafica. Questo programma verrà distribuito quindi ho bisogno del programma per comunicare effettivamente con la scheda grafica per scoprire cosa supporta. L'unica API che voglio usare è l'API di Windows, o il toolkit QT4, ma non credo che lo faccia a QT4 a meno che tu non stia usando i widget grafici in modi strani.C++ Scoprire cosa risoluzioni sono supportate dalla scheda grafica

Sono abbastanza sicuro che questo è possibile con l'API di Windows. Io proprio non so come farlo.

Oh, e vi prego di tagliare un certo allentamento, mi è familiare con QT4 e C++, ma io sono in genere un programmatore Linux, sto scrivendo questo per qualcun altro. L'unica cosa che ho fatto con l'API di Windows è creare una finestra di messaggio, impostare lo sfondo e utilizzare le variabili di sistema. Quindi, per favore, spiega semplicemente il processo. Si prega di non pubblicare solo un collegamento al msdn, odio la loro documentazione, e odio Microsoft. Io uso Windows forse due volte all'anno.

+0

Per qualsiasi motivo sei limitato all'API Win32? L'API DirectX incapsula questa funzionalità in modo da non dover gestire fornitori di schede grafiche diverse. –

+6

"Si prega di non pubblicare solo un collegamento a msdn, odio la loro documentazione, e odio Microsoft." Davvero !? La documentazione MSDN è generalmente fantastica. – James

risposta

17

Il seguente dovrebbe probabilmente lavorare per voi nel caso generale

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; 
    } 

Questo dovrebbe stampare tutte le risoluzioni supportate sul display corrente che il .exe è in esecuzione. Supponendo che tu non abbia a che fare con una scheda grafica multi-display, questo dovrebbe funzionare. Altrimenti dovresti usare il loop EnumDisplayDevices su ogni display.

Una volta a capire quale risoluzione si vuole si può usare 'ChangeDisplaySettingsEx' per modificare la visualizzazione della modalità desiderata.

L'utilizzo di DirectX è possibile ma non lo consiglierei in quanto il codice è molto più complicato (dover inizializzare DirectX e utilizzare i puntatori COM) a meno che non si preveda di utilizzare effettivamente DirectX per più di una semplice determinazione delle risoluzioni dello schermo.

+0

questo è esattamente quello che volevo, non capivo che ogni numero di modalità era ogni res di supporto, e che 0 era attuale, grazie –

+0

non è interessante che io possa guardare qualche codice di esempio e capirlo meglio di leggere il info off the msdn –

+0

@TheDude Ognuno ha uno stile di apprendimento diverso. Il tuo e il mio sembra essere 'imparare dall'esempio'. – deed02392

2

EnumDisplaySettings :)

Da MSDN:

"Per ottenere le impostazioni di visualizzazione correnti, passare i ENUM_CURRENT_SETTINGS costanti nel parametro iModeNum alle API EnumDisplaySettings, come illustrato dalla seguente codice C++."

DEVMODE dm; 
// initialize the DEVMODE structure 
ZeroMemory(&dm, sizeof(dm)); 
dm.dmSize = sizeof(dm); 
if (0 != EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm)) 
{ 
// inspect the DEVMODE structure to obtain details 
// about the display settings such as 
// - Orientation 
// - Width and Height 
// - Frequency 
// - etc. 
} 
+2

E 'divertente che l'unica parola nella vostra risposta è un collegamento a MSDN, che l'interrogante ha dichiarato esplicitamente che non è interessato a ... –

+0

@ Frédéric Hamidi. Ho aggiunto un esempio. – YWE

+0

Non vedo dove "The Dude" abbia detto tutto. Ha detto "API Windows" e il collegamento punta a una funzione in GDI, che è certamente una parte dell'API di Windows. Questo mi sembra esattamente quello che è stato chiesto. –

Problemi correlati