Retour des modes d’affichage : DrvGetModes

Le pilote d’affichage doit également prendre en charge DrvGetModes. Cette fonction donne à GDI un pointeur vers un tableau de structures DEVMODEW . Les structures définissent les attributs de l’affichage pour les différents modes qu’il prend en charge, notamment la dimension (en pixels et en millimètres), le nombre de plans, les bits par plan, les informations de couleur, etc.

L’ordre dans lequel un pilote écrit les modes d’affichage disponibles en mémoire lorsque la fonction DrvGetModes est appelée peut affecter le mode d’affichage final choisi par Windows. En général, si une application ne spécifie pas de mode par défaut, le système sélectionne le premier mode correspondant dans la liste fournie par le pilote.

Par exemple, supposons que le mode d’affichage actuel soit

800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER

et le pilote spécifie la liste des modes d’affichage disponibles comme suit :

Mode Détails du mode
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
  • Cas 1

    Si une application tente de définir le moniteur sur 600x800x32bpp@60Hz, mais que les indicateurs DM_DISPLAYORIENTATION et DM_DISPLAYFIXEDOUTPUT ne sont pas définis dans le membre dmFields de DEVMODEW, le système doit choisir l’orientation et les modes de sortie fixes. Dans ce cas, le système choisit le mode d’affichage C , car il s’agit du premier mode répertorié qui correspond au paramètre de DMDFO_CENTER actuel.

  • Cas 2

    Si l’application tente de définir le moniteur sur 600x800x32bpp@60Hz DMDFO_STRETCH, le système choisit le mode d’affichage A.

  • Cas 3

    Si l’application tente de définir le moniteur sur 600x800x32bpp@60Hz DMDO_270, le système choisit le mode d’affichage D.

  • Cas 4

    Si l’application tente de définir le moniteur sur 600x800x32bpp@60Hz DMDO_DEFAULT, le système ne trouve pas de correspondance acceptable.

Une exception s’applique à ces règles : lorsque le système recherche une correspondance pour l’orientation de l’affichage, que l’orientation n’est pas spécifiée et que le mode actuel ne peut pas être mis en correspondance, le système donne DMDO_DEFAULT priorité sur les autres orientations d’affichage.

Par exemple, supposons que le mode d’affichage actuel soit

600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH

et le pilote spécifie la liste des modes d’affichage disponibles comme suit :

Mode Détails du mode
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

Dans ce cas, si l’application tente de définir le moniteur sur 800x600x32bpp@60Hz, le système choisit le mode d’affichage D.