EngCreateWnd 函式 (winddi.h)
EngCreateWnd 函式會為 hwnd 所參考的視窗建立 WNDOBJ 結構。
語法
ENGAPI WNDOBJ * EngCreateWnd(
SURFOBJ *pso,
HWND hwnd,
WNDOBJCHANGEPROC pfn,
FLONG fl,
int iPixelFormat
);
參數
pso
識別裝置表面 之 SURFOBJ 結構的指標。
hwnd
處理應用程式呼叫 Win32 CreateWindow 或對等函式所建立的視窗。
pfn
fl
這是一個位掩碼,指定 GDI 應該追蹤和回報給驅動程式的變更類型。 此值必須透過驅動程式提出的所有 WNDOBJ 要求保持一致。 此參數可以是下列一或多個位欄位值:
旗標 | 意義 |
---|---|
WO_DRAW_NOTIFY | GDI 應該提供驅動程式WOC_DRAWN通知。 |
WO_RGN_CLIENT | GDI 應該追蹤視窗物件的用戶端區域中的變更,並在視窗可見的用戶端區域變更時通知驅動程式。 回呼函式中列舉的區域是視窗的新可見工作區。 |
WO_RGN_CLIENT_DELTA | GDI 應該追蹤視窗物件差異用戶端區域中的變更,並在視窗可見區域變更時通知驅動程式。 回呼函式中列舉的區域是位於新區域,但不在舊區域中的無空差異區域。 差異區域只在回呼期間有效。 |
WO_RGN_DESKTOP_COORD |
GDI 會在系統執行多個監視器時,建立具有桌面座標的 WNDOBJ 結構。
GDI 會忽略此旗標,並在系統執行單一監視器時,建立具有裝置座標的 WNDOBJ 結構。 |
WO_RGN_SURFACE | GDI 應該追蹤視窗物件介面區域中的變更,並在介面區域變更時通知驅動程式。 介面區域是顯示介面區,不包括驅動程式所追蹤視窗的所有可見客戶端區域。 |
WO_RGN_SURFACE_DELTA | GDI 應該追蹤視窗對象差異介面區域中的變更,並在介面區域變更時通知驅動程式。 回呼函式中列舉的區域是位於新介面區域中,但不在舊介面區域中的無空差異區域。 差異表面區域只在回呼期間有效。 |
WO_RGN_UPDATE_ALL | GDI 應該通知驅動程式在其任何視窗的可見區域變更時追蹤的所有視窗。 這個旗標必須與 WO_RGN_CLIENT 旗標搭配使用。 |
WO_RGN_WINDOW | GDI 應該追蹤視窗物件 (整個區域中的變更,其中包括視窗) 的客戶端區域,並在視窗的區域變更時通知驅動程式。 |
WO_SPRITE_NOTIFY | 當 Windows 的任何可見區域重疊或 Sprite 不再重疊時,GDI 應該通知驅動程式它追蹤的所有視窗。 |
iPixelFormat
指定與視窗對象相關聯的像素格式。 視窗物件的像素格式是固定的。 如果沒有相關聯的圖元格式,這個參數可以是零。
傳回值
如果函式成功,傳回值是 WNDOBJ 結構的指標。 否則,如果驅動程式正在追蹤相同的視窗,則傳回值為 -1;如果驅動程式未追蹤相同的視窗,則傳回值為零。
備註
因為建立窗口物件牽涉到鎖定窗口資源, 所以 EngCreateWnd 應該只在 DrvEscape中逸出WNDOBJ_SETUP的內容中呼叫。
EngCreateWnd 支援多個驅動程式的窗口追蹤,其中每個驅動程式都是由 pfn 所識別的唯一 WNDOBJCHANGEPROC 函式指標所識別。 例如,實時視訊驅動程式可以在 OpenGL 驅動程式追蹤 OpenGL 視窗的變更時追蹤即時視訊視窗的變更。
如果DrvEscape建立新的WNDOBJ,GDI會以最新的窗口狀態呼叫 WNDOBJCHANGEPROC。 當WNDOBJ結構所描述的窗口終結時,GDI也會通知 WNDOBJCHANGEPROC 。
傳遞至 WNDOBJCHANGEPROC 的WOC_SPRITE_OVERLAP和WOC_SPRITE_NO_OVERLAP通知可讓驅動程式在其視窗上方同步通知,並採取適當的動作。 驅動程式會接收這些通知,即使所有Sprite都已由 EngControlSprites的 ECS_TEARDOWN旗標損毀也一樣。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用於 Windows 2000 和更新版本的 Windows 作業系統。 |
目標平台 | Universal |
標頭 | winddi.h (包含Winddi.h) |
程式庫 | Win32k.lib |
Dll | Win32k.sys |