IDirectDrawSurface7::Lock メソッド (ddraw.h)
サーフェス メモリへのポインターを取得します。
構文
HRESULT Lock(
[in] LPRECT unnamedParam1,
[in, out] LPDDSURFACEDESC2 unnamedParam2,
[in] DWORD unnamedParam3,
[in] HANDLE unnamedParam4
);
パラメーター
[in] unnamedParam1
ロックされているサーフェスの領域を識別する RECT 構造体へのポインター。 このパラメーターが NULL の場合、サーフェス全体がロックされます。
[in, out] unnamedParam2
サーフェスに関する関連する詳細を記述し、サーフェスに関する情報を受け取る DDSURFACEDESC2構造体への ポインター。
[in] unnamedParam3
サーフェスをロックする方法を決定するフラグの組み合わせ。 次のフラグが定義されています。
DDLOCK_DONOTWAIT
IDirectDrawSurface7 インターフェイスでは、既定値は DDLOCK_WAIT です。 既定値をオーバーライドし、アクセラレータがビジー状態のときに時間を使用する (DDERR_WASSTILLDRAWING戻り値で示される) 場合は、DDLOCK_DONOTWAITを使用します。
DDLOCK_EVENT
現在、実装されていません。
DDLOCK_NOOVERWRITE
DirectX 7.0 の新機能。 Direct3D 頂点バッファー ロックでのみ使用されます。 ロック中にフレームの開始 (またはこのフラグのない最後のロック) が変更された後に描画操作で参照された頂点がないことを示します。 これは、頂点バッファーにデータを追加するだけの場合に便利です。
DDLOCK_NOSYSLOCK
Win16Mutex (Win16Lock とも呼ばれます) は使用しないでください。 このフラグは、プライマリ サーフェスをロックするときに無視されます。
DDLOCK_DISCARDCONTENTS
DirectX 7.0 の新機能。 Direct3D 頂点バッファー ロックでのみ使用されます。 このロック中に頂点バッファーの内容に関する想定が行われないことを示します。 これにより、Direct3D またはドライバーは、頂点バッファーとして代替メモリ領域を提供できます。 これは、頂点バッファーの内容をクリアして新しいデータを入力する場合に便利です。
DDLOCK_OKTOSWAP
このフラグは廃止され、DDLOCK_DISCARDCONTENTS フラグに置き換えられました。
DDLOCK_READONLY
ロックされているサーフェスを読み取ることができることを示します。
DDLOCK_SURFACEMEMORYPTR
指定した四角形の上部への有効なメモリ ポインターを返す必要があることを示します。 四角形が指定されていない場合は、サーフェスの上部へのポインターが返されます。 既定値です。
DDLOCK_WAIT
ビット ブロック転送 (bitblt) 操作が進行中のためロックを取得できない場合、 ロック はロックが取得されるか、DDERR_SURFACEBUSYなどの別のエラーが発生するまで再試行します。
DDLOCK_WRITEONLY
ロックされているサーフェスが書き込み可能であることを示します。
[in] unnamedParam4
イベントのハンドル。 このパラメーターは現在使用されていないため、NULL に設定する必要があります。
戻り値
メソッドが成功した場合、戻り値はDD_OK。
失敗した場合、メソッドは次のいずれかのエラー値を返すことができます。
- DDERR_INVALIDOBJECT
- DDERR_INVALIDPARAMS
- DDERR_OUTOFMEMORY
- DDERR_SURFACEBUSY
- DDERR_SURFACELOST
- DDERR_WASSTILLDRAWING
注釈
IDirectDrawSurface7 では、Lock の既定の動作はアクセラレータの完了を待機することです。 したがって、既定の条件下では、 Lock はDDERR_WASSTILLDRAWINGを返しません。 エラー コードを表示し、bitblt 操作が成功するまで待機しない場合は、DDLOCK_DONOTWAIT フラグを使用します。
サーフェス メモリ ポインターを取得した後、対応する IDirectDrawSurface7::Unlock メソッドが呼び出されるまで、サーフェス メモリにアクセスできます。 サーフェスのロックが解除されると、サーフェス メモリへのポインターが無効になります。
DirectDraw bitblt 関数を呼び出して、サーフェスのロックされた領域からビットを取得しないでください。 その場合、bitblt は DDERR_SURFACEBUSY または DDERR_LOCKEDSURFACES を返します。 GDI blit 関数は、ロックされたビデオ メモリサーフェイスで使用すると自動的に失敗します。
DDLOCK_NOSYSLOCK フラグを含めない限り、 Lock は IDirectDrawSurface7::Unlock メソッドを呼び出すまで、DirectDraw に Win16Mutex (Win16Lock とも呼ばれます) を保持させます。 Win16Mutex が保持されている間は、GUI デバッガーを操作できません。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | ddraw.h |
Library | Ddraw.lib |
[DLL] | Ddraw.dll |