Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectDraw Visual Basic チュートリアル」を参照すること。
DirectDraw を初期化した後、デバイスがオーバーレイ サーフェスをサポートすることを確認する必要がある。DirectDraw はオーバーレイをエミュレートしないため、ハードウェア デバイス ドライバがオーバーレイをサポートしない場合には続行できない。オーバーレイ サポートをテストするには、IDirectDraw7::GetCaps メソッドでデバイス ドライバの能力を取得する。この呼び出し後、関連する DDCAPS 構造体の dwFlags メンバで DDCAPS_OVERLAY フラグを探す。このフラグがあれば、ディスプレイ ハードウェアはオーバーレイをサポートする。このフラグがなければ、そのデバイスではオーバーレイ サーフェスを利用できない。
Mosquito サンプル アプリケーションにおける次の例では、ハードウェア オーバーレイ サポートのテスト方法について示す。
BOOL AreOverlaysSupported() { DDCAPS capsDrv; HRESULT ddrval; // ドライバ能力を取得し、オーバーレイ サポートを決定する。 ZeroMemory(&capsDrv, sizeof(capsDrv)); capsDrv.dwSize = sizeof(capsDrv); ddrval = g_lpdd->GetCaps(&capsDrv, NULL); if (FAILED(ddrval)) return FALSE; // 現在のモードで、ドライバがオーバーレイをサポートするか? // (現在、DirectDraw エミュレーション レイヤはオーバーレイをサポートしていない。 // ハードウェア サポートがなければ、オーバーレイに関する API は失敗する。 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY)) return FALSE; return TRUE; }
上記の例では、IDirectDraw7::GetCaps メソッドを呼び出してデバイス ドライバ能力を取得する。呼び出しの最初のパラメータは、デバイス ドライバの能力を記述する情報で埋め込まれる DDCAPS のアドレスである。アプリケーションは、エミュレーション能力に関する情報を必要としないため、2 番目のパラメータは NULL に設定する。
ドライバ能力を取得した後、この例では、論理演算の AND 処理で dwCaps メンバの DDCAPS_OVERLAY フラグの存在を調べる。フラグがない場合、この例では失敗を示す FALSE を返す。フラグがある場合は、デバイス ドライバがオーバーレイ サーフェスをサポートすることを示す TRUE を返す。
このコードで、他のオーバーレイ サーフェスが他のアプリケーションで使用されていないことを確認するとよい。そのためには、DDCAPS 構造体の dwMaxVisibleOverlays および dwCurrentVisibleOverlays メンバを調べる。