Platform SDK: DirectX

ステップ 2 : アプリケーション動作の決定

[Visual Basic]

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

[C++]

ディスプレイの解像度を変更する前に、少なくとも IDirectDraw7::SetCooperativeLevel メソッドの dwFlags パラメータに DDSCL_EXCLUSIVE および DDSCL_FULLSCREEN フラグを指定する必要がある。これにより、アプリケーションがディスプレイ デバイスを完全に制御できるようになり、他のアプリケーションがディスプレイ アダプタを共有できなくなる。さらに、DDSCL_FULLSCREEN フラグで、アプリケーションを排他 (フルスクリーン) モードに設定する。アプリケーションはデスクトップ全体をカバーしており、アプリケーションだけがスクリーンに書き込むことができる。ただし、デスクトップは利用可能なままである(排他モードで実行するアプリケーションのデスクトップを見るには、DDEx1 を起動して ALT + TAB を押す)。

次の例では、SetCooperativeLevel メソッドの使用方法を示す。

HRESULT       hRet; 
LPDIRECTDRAW7 g_pDD;   // 既に DirectDrawCreateEx によって作成されている。

hRet = g_pDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
if (hRet != DD_OK)
{ 
    // 排他モードは成功した。
} 
else 
{ 
    // 排他モードは失敗した。
    // ただし、アプリケーションは実行したままである。
} 
 

SetCooperativeLevel が DD_OK を返さない場合でも、DDSCL_NORMAL を指定してアプリケーションを続行できる。ただし、アプリケーションが排他モードでなければ、アプリケーションの要求するパフォーマンス能力を実行できない可能性がある。この場合、続行するかどうかをユーザーに決定させるメッセージを表示した方がいいだろう。

フルスクリーン (排他協調レベル) を設定している場合、アプリケーションの異常終了を Microsoft® Windows® で判断できるように、アプリケーションのウィンドウ ハンドルを SetCooperativeLevel に渡す。たとえば、一般保護 (GP) エラーが発生し、グラフィックス デバイス インターフェイス (GDI) がバック バッファにフリップされる場合、ユーザーは Windows スクリーンに戻れなくなる。このエラーの発生を回避するために、DirectDraw は、アプリケーション ウィンドウに送られるメッセージをトラップするバックグラウンドで実行するプロセスを提供する。アプリケーションが終了するときに、DirectDraw はこれらのメッセージを使用して判断する。ただし、この機能にはいくつかの制限がある。アプリケーションに対するメッセージを取得するウィンドウ ハンドルを指定する必要がある。つまり、他にもウィンドウを作成する場合、アクティブなウィンドウを指定したことを確認する必要がある。これを指定しないと、GDI で予測不可能な動作が生じたり、Alt + Tab を押しても応答がないといった問題が生じることになる。

次項 :ステップ 3 : ディスプレイ モードの変更