ディスプレイ モードを返す: DrvGetModes

ディスプレイ ドライバーは、DrvGetModes もサポートする必要があります。 この関数は、GDI に DEVMODEW 構造体の配列を指すポインターを提供します。 構造体は、寸法 (ピクセルとミリメートルの両方)、平面の数、平面あたりのビット数、色情報など、サポートするさまざまなモードのディスプレイの属性を定義します。

DrvGetModes 関数が呼び出されたときに、ドライバーが使用可能なディスプレイ モードをメモリに書き込む順序は、Windows が選択する最終的なディスプレイ モードに影響する可能性があります。 一般に、アプリケーションが既定のモードを指定しない場合、システムはドライバーによって提供されるリストで最初に一致するモードを選択します。

たとえば、現在のディスプレイ モードが

800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER

と仮定すると、ドライバーは、使用可能なディスプレイ モードのリストを次のように指定します。

モード モードの詳細
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
  • ケース 1

    アプリケーションがモニターを 600x800x32bpp@60Hz に設定しようとしても、DEVMODEWdmFields メンバーに DM_DISPLAYORIENTATION フラグと DM_DISPLAYFIXEDOUTPUT フラグが設定されていない場合、システムは方向と固定出力モードを選択する必要があります。 この場合、システムは現在の DMDFO_CENTER 設定に一致するリストされた最初のモードであるため、ディスプレイ モード C を選択します。

  • ケース 2

    アプリケーションがモニターを 600x800x32bpp@60Hz DMDFO_STRETCH に設定しようとすると、システムはディスプレイ モード A を選択します。

  • ケース 3

    アプリケーションがモニターを 600x800x32bpp@60Hz DMDO_270 に設定しようとすると、システムはディスプレイ モード D を選択します。

  • ケース 4

    アプリケーションがモニターを 600x800x32bpp@60Hz DMDO_DEFAULT に設定しようとすると、システムは受け入れ可能な一致を見つけることができません。

1 つの例外がこれらのルールに適用されます。システムが表示方向の一致を求め、方向が指定されておらず、現在のモードが一致しない場合、システムは他の表示方向よりも DMDO_DEFAULT を優先します。

たとえば、現在のディスプレイ モードが

600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH

と仮定すると、ドライバーは、使用可能なディスプレイ モードのリストを次のように指定します。

モード モードの詳細
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

このような状況では、アプリケーションがモニターを 800x600x32bpp@60Hz に設定しようとすると、システムはディスプレイ モード D を選択します。