Restituzione delle modalità di visualizzazione: DrvGetModes

Il driver di visualizzazione deve supportare anche DrvGetModes. Questa funzione fornisce a GDI un puntatore a una matrice di strutture DEVMODEW . Le strutture definiscono gli attributi della visualizzazione per le varie modalità supportate, inclusa la dimensione (in pixel e millimetri), il numero di piani, i bit per piano, le informazioni sul colore e così via.

L'ordine in cui un driver scrive le modalità di visualizzazione disponibili in memoria quando viene chiamata la funzione DrvGetModes può influire sulla modalità di visualizzazione finale scelta da Windows. In generale, se un'applicazione non specifica una modalità predefinita, il sistema selezionerà la prima modalità corrispondente nell'elenco fornito dal driver.

Si supponga, ad esempio, che la modalità di visualizzazione corrente sia

800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER

e il driver specifica l'elenco delle modalità di visualizzazione disponibili come indicato di seguito:

Mode Dettagli modalità
A 600x800x32bpp@60Hz DMDO_270 DMDFO_STRETCH
B 600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH
C 600x800x32bpp@60Hz DMDO_90 DMDFO_CENTER
D 600x800x32bpp@60Hz DMDO_270 DMDFO_CENTER
  • Case 1

    Se un'applicazione tenta di impostare il monitoraggio su 600x800x32bpp@60Hz, ma i flag di DM_DISPLAYORIENTATION e DM_DISPLAYFIXEDOUTPUT non sono impostati nel membro dmFields di DEVMODEW, il sistema deve scegliere l'orientamento e le modalità di output fisse. In questo caso, il sistema sceglierà la modalità di visualizzazione C perché è la prima modalità elencata che corrisponde all'impostazione di DMDFO_CENTER corrente.

  • Case 2

    Se l'applicazione tenta di impostare il monitoraggio su 600x800x32bpp@60Hz DMDFO_STRETCH, il sistema sceglierà la modalità di visualizzazione A.

  • Caso 3

    Se l'applicazione tenta di impostare il monitoraggio su 600x800x32bpp@60Hz DMDO_270, il sistema sceglierà la modalità di visualizzazione D.

  • Caso 4

    Se l'applicazione tenta di impostare il monitoraggio su 600x800x32bpp@60Hz DMDO_DEFAULT, il sistema non riuscirà a trovare una corrispondenza accettabile.

Un'eccezione si applica a queste regole: quando il sistema cerca una corrispondenza per l'orientamento della visualizzazione e l'orientamento non è specificato e la modalità corrente non può essere corrispondente, il sistema assegna DMDO_DEFAULT priorità rispetto ad altri orientamenti di visualizzazione.

Si supponga, ad esempio, che la modalità di visualizzazione corrente sia

600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH

e il driver specifica l'elenco delle modalità di visualizzazione disponibili come indicato di seguito:

Mode Dettagli modalità
A 800x600x32bpp@60Hz DMDO_180 DMDFO_CENTER
B 800x600x32bpp@60Hz DMDO_180 DMDFO_STRETCH
C 800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER
D 800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_STRETCH

In questa situazione, se l'applicazione tenta di impostare il monitoraggio su 800x600x32bpp@60Hz, il sistema sceglierà la modalità di visualizzazione D.