Platform SDK: DirectX

ウィンドウの移動を処理する

[Visual Basic]

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

[C++]

ウィンドウで実行される DirectX アプリケーションは、ウィンドウに対するブリットがデスクトップの正しい位置に現れるように、ウィンドウのクライアント領域の位置を追跡しなければならない。この追跡を怠ると、グラフィックスがアプリケーション ウィンドウの外側に現れ、ユーザーを混乱させることになる。サンプル Triangle は、次に示すように、システムがウィンドウ プロシージャに送る WM_MOVE メッセージに応答する。

 .
 .
 .
    case WM_MOVE:
        // 移動メッセージは、プライマリ サーフェスにバック バッファをブリットするのに使用する。
        // 画面の矩形を更新するために追跡する必要がある。
        if( g_bActive && g_bReady )
            OnMove( (SHORT)LOWORD(lParam), (SHORT)HIWORD(lParam) );
        break;
 . 
 .
 .

g_bActive 変数は、ウィンドウ プロシージャの別の箇所で設定されてウィンドウがアクティブかどうかを示し、ウィンドウが最小化されている場合には FALSE に設定される。変数 g_bReady には、アプリケーションが使用中の DirectX オブジェクトを再作成しているときを除いて、TRUE が設定される。この 2 つの変数が共に TRUE である場合に、次のアプリケーション定義関数 OnMove が呼び出される。

VOID OnMove( INT x, INT y )
{
    DWORD dwWidth  = g_rcScreenRect.right - g_rcScreenRect.left;
    DWORD dwHeight = g_rcScreenRect.bottom - g_rcScreenRect.top;
    SetRect( &g_rcScreenRect, x, y, x + dwWidth, y + dwHeight );
}

この関数は、グローバル変数 g_rcScreenRect のサイズを単に再計算するものである。このチュートリアルでは、「ステップ 5.3 : ディスプレイを更新する」でディスプレイを更新するときに、このグローバル変数を目的の矩形として使用している。