Zurückgeben von Anzeigemodi: DrvGetModes

Der Anzeigetreiber muss auch DrvGetModes unterstützen. Diese Funktion gibt GDI einen Zeiger auf ein Array von DEVMODEW-Strukturen . Die Strukturen definieren die Attribute der Anzeige für die verschiedenen Modi, die sie unterstützt, einschließlich der Dimension (in Pixeln und Millimetern), der Anzahl der Ebenen, Bits pro Ebene, Farbinformationen usw.

Die Reihenfolge, in der ein Treiber die verfügbaren Anzeigemodi in den Arbeitsspeicher schreibt, wenn die DrvGetModes-Funktion aufgerufen wird, kann sich auf den endgültigen Anzeigemodus auswirken, den Windows wählt. Wenn eine Anwendung keinen Standardmodus angibt, wählt das System im Allgemeinen den ersten Abgleichsmodus in der vom Treiber bereitgestellten Liste aus.

Angenommen, der aktuelle Anzeigemodus ist

800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER

und der Treiber gibt die Liste der verfügbaren Anzeigemodi wie folgt an:

Mode Modusdetails
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
  • Fall 1

    Wenn eine Anwendung versucht, den Monitor auf 600x800x32bpp@60Hz festzulegen, die DM_DISPLAYORIENTATION- und DM_DISPLAYFIXEDOUTPUT-Flags jedoch nicht im dmFields-Member von DEVMODEW festgelegt sind, muss das System die Ausrichtung und den festen Ausgabemodus auswählen. In diesem Fall wählt das System den Anzeigemodus C aus, da es sich um den ersten aufgeführten Modus handelt, der der aktuellen einstellung DMDFO_CENTER entspricht.

  • Fall 2

    Wenn die Anwendung versucht, den Monitor auf 600x800x32bpp@60Hz DMDFO_STRETCH festzulegen, wählt das System den Anzeigemodus A aus.

  • Fall 3

    Wenn die Anwendung versucht, den Monitor auf 600x800x32bpp@60Hz DMDO_270 festzulegen, wählt das System den Anzeigemodus D aus.

  • Fall 4

    Wenn die Anwendung versucht, den Monitor auf 600x800x32bpp@60Hz DMDO_DEFAULT festzulegen, findet das System keine akzeptable Übereinstimmung.

Eine Ausnahme gilt für diese Regeln: Wenn das System eine Übereinstimmung für die Anzeigeausrichtung sucht, die Ausrichtung nicht angegeben ist und der aktuelle Modus nicht übereinstimmen kann, gibt das System DMDO_DEFAULT Priorität gegenüber anderen Anzeigeausrichtungen.

Angenommen, der aktuelle Anzeigemodus ist

600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH

und der Treiber gibt die Liste der verfügbaren Anzeigemodi wie folgt an:

Mode Modusdetails
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

Wenn die Anwendung in diesem Fall versucht, den Monitor auf 800x600x32bpp@60Hz festzulegen, wählt das System den Anzeigemodus D aus.