Platform SDK: DirectX

ステップ 3 : バック バッファへのビットマップのロード

[Visual Basic]

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

[C++]

DirectDrawPalette オブジェクトが DirectDrawSurface オブジェクトと関連付けられると、DDEx2 は次のコードで Back.bmp ビットマップをバック バッファにロードする。

// バック バッファにビットマップをロードする。
ddrval = DDReLoadBitmap(lpDDSBack, szBackground); 
 
if(ddrval != DD_OK) 
    // Load failed. 
 

DDReLoadBitmap は、Ddutil.cpp にあるもう 1 つのサンプル関数である。この関数は、ファイルまたはリソースからビットマップを既存の DirectDraw サーフェスにロードする。(サーフェスを作成してそのサーフェスにビットマップをロードするには、DDLoadBitmap を使うこともできる。詳細情報は、「チュートリアル 5 : パレットの動的変更」を参照すること。DDEx2 では、szBackground の指す Back.bmp ファイルを lpDDSBack の指すバック バッファにロードする。DDReLoadBitmap 関数は DDCopyBitmap 関数を呼び出して、ファイルをバック バッファにコピーしてから、適切なサイズに伸縮する。

DDCopyBitmap 関数はビットマップをメモリにコピーして、ビットマップのサイズを取得するために GetObject 関数を使う。そして、次に示すコードを使い、ビットマップを配置するバック バッファのサイズを取得する。

// サーフェスのサイズを得る 
ddsd.dwSize = sizeof(ddsd); 
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH; 
pdds->GetSurfaceDesc(&ddsd); 
 

ddsd 値は、DDSURFACEDESC2 構造体へのポインタである。この構造体は、DirectDraw サーフェスの現在の記述を格納する。この場合、メンバは、DDSD_HEIGHT と DDSD_WIDTH で示されるサーフェスの高さとを記述する。IDirectDrawSurface7::GetSurfaceDesc メソッドへの呼び出しは、構造体に該当する値をロードする。DDEx2 では、高さ 480、幅 640 とする。

DDCopyBitmap サンプル関数はサーフェスをロックして、StretchBlt 関数を使い、バック バッファにあてはまるようにビットマップを伸縮または圧縮してコピーする。

if ((hr = pdds->GetDC(&hdc)) == DD_OK) 
{ 
    StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y, 
        dx, dy, SRCCOPY); 
    pdds->ReleaseDC(hdc); 
} 
 

次項 :ステップ 4 : サーフェスのフリップ