Devolver modos de visualización: DrvGetModes

El controlador de pantalla también debe admitir DrvGetModes. Esta función proporciona a GDI un puntero a una matriz de estructuras DEVMODEW . Las estructuras definen los atributos de la pantalla para los distintos modos que admite, incluida la dimensión (en píxeles y milímetros), el número de planos, bits por plano, información de color, etc.

El orden en el que un controlador escribe los modos de visualización disponibles en la memoria cuando se llama a la función DrvGetModes puede afectar al modo de presentación final que Windows elige. En general, si una aplicación no especifica un modo predeterminado, el sistema seleccionará el primer modo coincidente en la lista proporcionada por el controlador.

Por ejemplo, supongamos que el modo de visualización actual es

800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER

y el controlador especifica la lista de modos de visualización disponibles de la siguiente manera:

Modo Detalles del modo
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
  • Caso 1

    Si una aplicación intenta establecer el monitor en 600x800x32bpp@60Hz, pero las marcas de DM_DISPLAYORIENTATION y DM_DISPLAYFIXEDOUTPUT no se establecen en el miembro dmFields de DEVMODEW, el sistema debe elegir los modos de salida fijos y de orientación. En este caso, el sistema elegirá el modo de presentación C porque es el primer modo enumerado que coincide con la configuración actual del DMDFO_CENTER.

  • Caso 2

    Si la aplicación intenta establecer el monitor en 600x800x32bpp@60Hz DMDFO_STRETCH, el sistema elegirá el modo de presentación A.

  • Caso 3

    Si la aplicación intenta establecer el monitor en 600x800x32bpp@60Hz DMDO_270, el sistema elegirá el modo de presentación D.

  • Caso 4

    Si la aplicación intenta establecer el monitor en 600x800x32bpp@60Hz DMDO_DEFAULT, el sistema no encontrará una coincidencia aceptable.

Una excepción se aplica a estas reglas: cuando el sistema busca una coincidencia para la orientación de la pantalla y no se especifica la orientación y no se puede coincidir el modo actual, el sistema dará DMDO_DEFAULT prioridad sobre otras orientaciones de visualización.

Por ejemplo, supongamos que el modo de visualización actual es

600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH

y el controlador especifica la lista de modos de visualización disponibles de la siguiente manera:

Modo Detalles del modo
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

En esta situación, si la aplicación intenta establecer el monitor en 800x600x32bpp@60Hz, el sistema elegirá el modo de visualización D.