共用方式為


DD_LOCKDATA結構 (ddrawint.h)

DD_LOCKDATA 結構包含執行 Microsoft DirectDraw 參數結構所定義之鎖定所需的資訊。

語法

typedef struct _DD_LOCKDATA {
  PDD_DIRECTDRAW_GLOBAL lpDD;
  PDD_SURFACE_LOCAL     lpDDSurface;
  DWORD                 bHasRect;
  RECTL                 rArea;
  LPVOID                lpSurfData;
  HRESULT               ddRVal;
  VOID                  *Lock;
  DWORD                 dwFlags;
  FLATPTR               fpProcess;
} *PDD_LOCKDATA, DD_LOCKDATA;

成員

lpDD

指向描述驅動程式裝置 的DD_DIRECTDRAW_GLOBAL 結構。

lpDDSurface

指向描述 surface 的DD_SURFACE_LOCAL 結構,也就是 LockD3DBuffer的情況,這是與要鎖定的記憶體區域相關聯的緩衝區。

bHasRect

指定 rArea 中的區域是否有效。 0x00000001 的值表示有效的區域,0x00000000表示不正確區域。

rArea

指定 RECTL 結構,定義要鎖定之介面上的區域。

lpSurfData

指定驅動程式可以傳回鎖定記憶體區域指標的位置。

ddRVal

指定驅動程式寫入 DdLockLockD3DBuffer 回呼傳回值的位置。 DD_OK的傳回碼表示成功。 如需詳細資訊,請參閱 DirectDraw 的傳回值

Lock

由 DirectDraw API 使用,且不應由驅動程式填入。

dwFlags

指定位元遮罩,告知驅動程式如何執行記憶體鎖定。 這個成員是下列任一值的位 OR:

旗標 意義
DDLOCK_DISCARDCONTENTS
在此鎖定期間,不會對表面或頂點緩衝區的內容進行任何假設。 這可啟用兩件事:
1.Microsoft Direct3D 或驅動程式可能會提供替代記憶體區域做為頂點緩衝區。 當一個計畫清除頂點緩衝區的內容並填入新資料時,這會很有用。
2.驅動程式有時會以重新排序的格式儲存表面資料。 當應用程式鎖定表面時,驅動程式會強制復原此表面資料重新排序,再讓應用程式查看表面內容。

此旗標是驅動程式的提示,因為它可以略過取消排序程式,因為應用程式計畫覆寫表面中的每個圖元或鎖定矩形 (,因此仍然要清除任何未重新排序的圖元) 。 當應用程式想要覆寫整個表面或鎖定矩形時,應該一律設定此旗標。

DDLOCK_DONOTWAIT IDirectDrawSurface7 和更新版本的介面上,預設值為 DDLOCK_WAIT。 如果您想要覆寫預設值並使用快速鍵忙碌 (的時間,如DDERR_WASSTILLDRAWING傳回碼所表示,) 然後使用這個旗標。
DDLOCK_EVENT 設定事件控制碼是否傳遞至 Lock,這會在事件可以傳回所要求的表面記憶體指標時觸發事件。
DDLOCK_HASVOLUMETEXTUREBOXRECT 驅動程式應該會傳回有效的記憶體指標,指向 rArea中矩形中指定的子卷積紋理開頭, (RECTL) 。 驅動程式會分別從左和右座標的前 16 位取得子卷的前後座標, (RECTL) 的左和右成員。 左右座標受限於較低的 16 位。 如果未指定矩形,驅動程式應該會傳回整個磁片區頂端的指標。 此值適用于 DirectX 8.1 和更新版本。
DDLOCK_NODIRTYUPDATE
在應用程式要求鎖定已設定D3DLOCK_NO_DIRTY_UPDATE旗標的記憶體區域之後,由執行時間傳送至驅動程式。 在此情況下,當執行時間呼叫驅動程式的 DdUnlock 函式來更新包含此區域的介面時,驅動程式不應將鎖定的記憶體區域視為已變更。 相反地,驅動程式應該只考慮先前呼叫其 D3dDrawPrimitives2 函式時所指定的區域,並使用 D3DDP2OP_ADDDIRTYRECT 並將D3DDP2OP_ADDDIRTYBOX列舉值變更為已變更。
根據預設,表面的鎖定會將已變更的區域新增至該表面。
DDLOCK_NOOVERWRITE 僅與 Direct3D 頂點緩衝區鎖定搭配使用。 表示 在 IDirect3DDevice7::D rawPrimitiveVBIDirect3DDevice7::D rawIndexedPrimitiveVB 呼叫 (所描述的頂點) ,因為畫面格開頭 (或沒有此旗標的最後一個鎖定,) 會在鎖定期間修改。 當其中一個只將資料附加至頂點緩衝區時,這非常有用。
DDLOCK_NOSYSLOCK
表示當此表面鎖定時,不應該採用全系統鎖定。 鎖定視訊記憶體表面時有數個優點,例如游標回應性、呼叫更多 Microsoft Windows 函式的能力,以及更容易偵錯。 不過,指定此旗標的應用程式必須符合說明檔中記載的一些條件。
鎖定主要複本時,無法指定此旗標。
DDLOCK_OKTOSWAP 與DDLOCK_DISCARDCONTENTS相同。
DDLOCK_READONLY 鎖定的介面只會從 讀取。 在 Windows 2000 和更新版本上,永遠不會設定此旗標。
DDLOCK_SURFACEMEMORYPTR 驅動程式應該會傳回 rArea中所指定矩形頂端的有效記憶體指標。 如果未指定矩形,驅動程式應該會傳回介面頂端的指標。
DDLOCK_WAIT 設定為 ,表示 Lock 應該等到它可以在傳回之前取得有效的記憶體指標為止。 如果設定此位, Lock 永遠不會傳回DDERR_WASSTILLDRAWING。
DDLOCK_WRITEONLY 鎖定的介面只會寫入。 在 Windows 2000 和更新版本上,永遠不會設定此旗標。

fpProcess

指定驅動程式記憶體的使用者模式對應指標。 驅動程式會在 DdMapMemory中執行此對應。 僅限 Windows 2000 和更新版本。

需求

   
標頭 ddrawint.h (包含 Winddi.h)

另請參閱

DdLock

DdMapMemory

LockD3DBuffer