Platform SDK: DirectX

IDirectDrawSurface7::Lock

IDirectDrawSurface7::Lock メソッドは、サーフェス メモリへのポインタを取得する。

HRESULT Lock(
  LPRECT lpDestRect,                
  LPDDSURFACEDESC2 lpDDSurfaceDesc,  
  DWORD dwFlags,                    
  HANDLE hEvent                     
);

パラメータ

lpDestRect
ロックされているサーフェスの領域を指定する RECT 構造体のアドレス。このパラメータが NULL の場合、サーフェス全体がロックされる。
lpDDSurfaceDesc
サーフェスに関連する詳細を格納する DDSURFACEDESC2 構造体のアドレス。
dwFlags
以下のフラグが定義されている。
DDLOCK_DONOTWAIT
IDirectDrawSurface7 インターフェイスでは、デフォルトは DDLOCK_WAIT である。デフォルトを無効にする場合、およびアクセラレータがビジーの場合 (DDERR_WASSTILLDRAWING 戻り値で示される) 場合は、DDLOCK_DONOTWAIT を使用する。
DDLOCK_EVENT
現時点では、実装されていない。
DDLOCK_NOOVERWRITE
DirectX 7.0 で追加。Direct3D 頂点バッファのロックにのみ使用する。ロック中にフレームの始点 (または、このフラグを使用しない場合は最後のロック) が変更されるため、Draw*PrimitiveVB の呼び出しに参照される頂点が存在しない示す。このフラグは、頂点バッファにデータを追加するときに便利である。
DDLOCK_NOSYSLOCK
Win16Mutex (Win16Lock と呼ばれる) を使用しない。プライマリ サーフェスをロックしているときは、このフラグは無視される。
DDLOCK_DISCARDCONTENTS
DirectX 7.0 で追加。Direct3D 頂点バッファのロックにのみ使用する。このロック中に頂点バッファの内容を引き継ぐ場所がないことを示す。このフラグを指定すると、Direct3D またはドライバは別のメモリ領域を頂点バッファとして提供できる。このフラグは、頂点バッファの内容を消去して新しいデータを入れるときに便利である。
DDLOCK_OKTOSWAP
このフラグは廃止されており、DDLOCK_DISCARDCONTENTS フラグで置き換えられている。
DDLOCK_READONLY
ロックされているサーフェスは読み込み専用であることを示す。
DDLOCK_SURFACEMEMORYPTR
指定される矩形の上位への有効なメモリ ポインタを返さなくてはならないことを示す。指定される矩形がない場合、サーフェスの上位へのポインタが返される。このフラグはデフォルトである。
DDLOCK_WAIT
ブリット処理中であるためロックを取得できない場合、ロックが取得されるまで、または DDERR_SURFACEBUSY などの別のエラーが発生するまで、メソッドはロックを取得しようと繰り返す。
DDLOCK_WRITEONLY
ロックされているサーフェスが書き込み可能であることを示す。
hEvent
未使用なので NULL を設定しておく。

戻り値

成功すれば、DD_OK を返す。

失敗すれば、以下のエラー値のいずれかを返す。

DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_OUTOFMEMORY
DDERR_SURFACEBUSY
DDERR_SURFACELOST
DDERR_WASSTILLDRAWING

注意

このメソッドの利用についての詳細情報は、「サーフェス メモリへの直接アクセス」を参照すること。

IDirectDrawSurface7 の場合、デフォルトでは、このメソッドはアクセラレータが終了するまで待機する。つまり、デフォルト状態では、このメソッドは DDERR_WASSTILLDRAWING を返さない。エラー コードを受け取り、ブリット処理が成功するまで待機しない場合は、DDLOCK_DONOTWAIT フラグを使用する。

サーフェス メモリ ポインタを取得した後、対応する IDirectDrawSurface7::Unlock メソッドが呼び出されるまでサーフェス メモリにアクセスできる。サーフェスのロックが解除されると、サーフェス メモリへのポインタは無効となる。

サーフェスのロックされた領域からブリットするために、DirectDraw ブリット関数を呼び出してはならない。この関数を呼び出した場合、ブリットは DDERR_SURFACEBUSY または DDERR_LOCKEDSURFACES のいずれかを返す。GDI ブリット関数は、ロックされたビデオ メモリ サーフェスで使用した場合は何も返さず失敗する。

DDLOCK_NOSYSLOCK フラグを含まなければ、このメソッドは IDirectDrawSurface7::Unlock メソッドを呼び出すまで、DirectDraw で Win16Mutex (Win16Lock とも呼ばれる) を保持する。GUI デバッガは、Win16Mutex が保持されている間は処理できない。

動作環境

  Windows NT/2000 :Windows 2000 が必要。
  Windows 95/98 : Windows 98 が必要。
  ヘッダー : ddraw.h で宣言。

参照

IDirectDrawSurface7::UnlockIDirectDrawSurface7::GetDCIDirectDrawSurface7::ReleaseDC