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 |