Platform SDK: DirectX

ステップ 1.2 : ディスプレイ モード情報を列挙する

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。

[C++]

IDirectDraw7::EnumDisplayModes メソッドは、ハードウェアが DirectDraw オブジェクトを介して公開するすべてのディスプレイ モードを列挙する。Enumeration アプリケーションでは、次のパラメータを使用して EnumDisplayModes 関数を呼び出す。

    // フルスクリーン ディスプレイ モードを列挙する。
    pDD->EnumDisplayModes( 0, NULL, &d3dDeviceInfo, ModeEnumCallback );

引数 NULL はすべてのモードの列挙を指定する。第 3 パラメータ &d3dDeviceInfo は、ドライバ情報を格納する D3DDEVICEINFO 構造体のアドレスであり、各列挙メンバに渡される。第 4 パラメータは、EnumModesCallback2 コールバック関数のアドレス ModeEnumCallback であり、ハードウェアが公開する全モードに対して列挙プロシージャで呼び出される。

static HRESULT WINAPI ModeEnumCallback( DDSURFACEDESC2* pddsd,
                                        VOID* pParentInfo )
{
    // ドライバでサポートされるモードのリストにモードをコピーする。
    D3DDEVICEINFO* pDriverInfo = (D3DDEVICEINFO*)pParentInfo;
    pDriverInfo->ddsdModes[pDriverInfo->dwNumModes++] = (*pddsd);
 
    return DDENUMRET_OK;
}

上記のコードでは、最初のパラメータ pddsd, は、作成可能なディスプレイ モードに関する情報を格納する読み込み専用の DDSURFACEDESC2 構造体である。pParentInfo パラメータ (ディスプレイ ドライバを表すアプリケーション定義データ) は、確実に参照されるように D3DDEVICEINFO 構造体にキャストされる。すべてのディスプレイ モードが列挙されたら、次は Direct3D デバイスを列挙する。このステップについては、「ステップ 1.3 : デバイス情報を列挙する」で説明する。