Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectDraw Visual Basic チュートリアル」を参照すること。
オーバーレイ サーフェスを表示した後、他には何もする必要がないかもしれない。しかし、ソフトウェアによっては、オーバーレイ サーフェスの再配置が必要になる場合もある。Mosquito サンプルでは、IDirectDrawSurface7::SetOverlayPosition メソッドを使ってオーバーレイを再配置する。次に例を示す。
// x 座標および y 座標を設定する。 . . . // x 位置に対するアライメント制限の有無を調べる必要 // があり、必要であれば調節する。 if (g_dwOverlayXPositionAlignment) dwXAligned = g_nOverlayXPos - g_nOverlayXPos % g_dwOverlayXPositionAlignment; else dwXAligned = g_nOverlayXPos; // オーバーレイを新しい位置に設定する。 ddrval = g_lpddsOverlay->SetOverlayPosition(dwXAligned, g_nOverlayYPos); if (ddrval == DDERR_SURFACELOST) { if (!RestoreAllSurfaces()) return; }
上記の例では、矩形を連続させることにより、存在する転送先矩形の境界アライメント制限に適合させる。調べるグローバル変数 g_dwOverlayXPositionAlignment は、アプリケーションが IDirectDraw7::GetCaps メソッドを前回呼び出したときに、DDCAPS 構造体の dwAlignBoundaryDest メンバにより報告された値と等しくなるように設定されている (詳細情報は、「ステップ 4.1 : 最小表示要件の決定」を参照すること)。転送先アライメント制限が存在する場合、新しい x 座標をそれに対応してピクセルと連続するように調整する。この要件が満たされない場合は、オーバーレイ サーフェスは表示されない。
新しい x 座標に必要な調整を行った後、IDirectDrawSurface7::SetOverlayPosition メソッドを呼び出してオーバーレイを再配置する。この呼び出しでは、最初のパラメータが連続した x 座標となり、2 番目のパラメータは新しい y 座標となる。これらの値は、オーバーレイの左上角の新しい位置を表す。DirectDraw は、最初にオーバーレイを表示するのに作成した IDirectDrawSurface7::UpdateOverlay メソッドから、既にサーフェスの寸法を取得しているため、幅と高さの情報を受け取らないし、また必要としない。1 つ以上のサーフェスが消失したために呼び出しが失敗すると、この例ではアプリケーションで定義された関数を呼び出して、失われたサーフェスをリストアしてから、そのビットマップを再ロードする。
注 : ターゲット サーフェスの下側または右側の縁に近すぎる座標を使わないように注意する。IDirectDraw7::SetOverlayPosition メソッドはクリッピングを実行しない。つまり、オーバーレイがターゲット サーフェスの縁をはみ出る可能性のある座標を使用すると、このメソッドは DDERR_INVALIDPOSITION を返して失敗する。