Platform SDK: DirectX

サポートされるディスプレイの決定

[C++]

ディスプレイ ハードウェアには数多くの種類があるため、すべてのデバイスがすべてのディスプレイ モードをサポートすることはない。与えられたシステムでサポートされるディスプレイ モードを決めるには、IDirectDraw7::EnumDisplayModes メソッドを呼び出す。該当する値やフラグを設定すると、EnumDisplayModes メソッドはサポートされるすべてのディスプレイ モードを列挙するか、指定した個々のディスプレイ モードがサポートされていることを確認する。このメソッドの最初のパラメータ dwFlags は、メソッドに対する追加オプションを管理する。たいていの場合、dwFlags を 0 に設定して追加オプションを無視する。2 番目のパラメータ lpDDSurfaceDesc は、確認すべき与えられたディスプレイ モードを記述する DDSURFACEDESC2 構造体のアドレスである。通常、このパラメータを NULL に設定して、すべてのモードの列挙を要求する。3 番目のパラメータ lpContext は、DirectDraw がコールバック関数に渡すポインタである。コールバック関数に追加データが必要でない場合は、このパラメータを NULL に設定する。最後に、lpEnumModesCallback パラメータを、サポートされたモードごとに DirectDraw が呼び出すコールバック関数のアドレスに設定する。

EnumDisplayModes を呼び出すときに与えるコールバック関数は、EnumModesCallback 関数のプロトタイプと適合しなければならない。ハードウェアがサポートする各ディスプレイ モードで、DirectDraw は 2 つのパラメータを渡してコールバック関数を呼び出す。最初のパラメータは、サポートされる 1 つのディスプレイ モードを記述する DDSURFACEDESC2 構造体のアドレスである。2 番目のパラメータは、もしあれば、EnumDisplayModes を呼び出すときに指定したアプリケーション定義のデータのアドレスとする。

DDSURFACEDESC2 構造体の値を調べて、それが記述するディスプレイ モードを決める。主要な構造体のメンバは、dwWidthdwHeight、および ddpfPixelFormat メンバである。dwWidth dwHeight メンバは、ディスプレイ モードのディメンジョンを記述する。ddpfPixelFormat メンバは、モードのビット深度に関する情報を含む DDPIXELFORMAT 構造体である。

DDPIXELFORMAT 構造体は、モードのビット深度を記述する情報を伝達し、ディスプレイ モードがパレットを使用しているかどうかを伝える。dwFlags メンバに DDPF_PALETTEINDEXED1、DDPF_PALETTEINDEXED2、DDPF_PALETTEINDEXED4、または DDPF_PALETTEINDEXED8 フラグがあると、ディスプレイ モードのビット深度は 1、2、4、または 8 ビットとなり、各ピクセルは関連付けられたパレットへのインデックスとなる。dwFlags が DDPF_RGB ならば、ディスプレイ モードは非パレット化となり、そのビット深度は DDPIXELFORMAT 構造体の dwRGBBitCount メンバに与えられる。

[Visual Basic]

ディスプレイ ハードウェアには数多くの種類があるため、すべてのデバイスがすべてのディスプレイ モードをサポートすることはない。与えられたシステムでサポートされるディスプレイ モードを決めるには、DirectDraw7.GetDisplayModesEnum メソッドを呼び出す。このメソッドは、サポートされるディスプレイ モードの列挙を取得するのに使用される DirectDrawEnumModes オブジェクトを返す。該当する値やフラグを設定すると、GetDisplayModesEnum メソッドは、DirectDrawEnumModes オブジェクトにサポートされるすべてのディスプレイ モードのリストを埋め込むか、または指定した個々のディスプレイ モードがサポートされていることを確認する。このメソッドの最初のパラメータ flags は、メソッドに対する追加オプションを管理する。たいていの場合、flags を DDEDM_DEFAULT に設定して追加オプションを無視する。2 番目のパラメータ ddsd は、確認すべき与えられたディスプレイ モードを記述する DDSURFACEDESC2 型のアドレスである。通常、このパラメータを Nothing に設定して、すべてのモードの列挙を要求する。

GetDisplayModesEnum メソッドによって DirectDrawEnumModes オブジェクトが返されると、DirectDrawEnumModes.GetCount メソッドを呼び出して、サポートされるディスプレイ モードで使用可能なモードの数を確認できる。次に、DirectDrawEnumModes.GetItem を呼び出して、DirectDrawEnumModes オブジェクトに含まれるディスプレイ モードのリストから個々のディスプレイ モードの説明を取得する。

GetItem メソッドによって取得された DDSURFACEDESC2 型の値を調べて、それが記述するディスプレイ モードを決める。主要なタイプのメンバは、lWidthlHeight、および ddpfPixelFormat メンバである。lWidth lHeight メンバは、ディスプレイ モードのディメンジョンを記述する。ddpfPixelFormat メンバは、モードのビット深度に関する情報を含む DDPIXELFORMAT 型である。

DDPIXELFORMAT 型は、モードのビット深度を記述する情報を伝達し、ディスプレイ モードがパレットを使用しているかどうかを伝える。lFlags メンバに DDPF_PALETTEINDEXED1、DDPF_PALETTEINDEXED2、DDPF_PALETTEINDEXED4、または DDPF_PALETTEINDEXED8 フラグがあると、ディスプレイ モードのビット深度は 1、2、4、または 8 ビットとなり、各ピクセルは関連付けられたパレットへのインデックスとなる。lFlags が DDPF_RGB ならば、ディスプレイ モードは非パレット化となり、そのビット深度は DDPIXELFORMAT 型の lRGBBitCount メンバに与えられる。