共用方式為


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 會讓 DirectDraw 保留 Win16Mutex (也稱為 Win16Lock) ,直到您呼叫 IDirectDrawSurface7::Unlock 方法為止。 保留 Win16Mutex 時,GUI 調試程式無法運作。

規格需求

需求
目標平台 Windows
標頭 ddraw.h
程式庫 Ddraw.lib
Dll Ddraw.dll

另請參閱

IDirectDrawSurface7