IDCompositionSurface::BeginDraw 方法 (dcomp.h)
起始此 Microsoft DirectComposition 介面物件的繪圖。 更新矩形必須位於表面的界限內;否則,此方法會失敗。
語法
HRESULT BeginDraw(
[in, optional] const RECT *updateRect,
[in] REFIID iid,
[out] void **updateObject,
[out] POINT *updateOffset
);
參數
[in, optional] updateRect
類型: const RECT*
要更新的矩形。 如果此參數為 NULL,則會更新整個點陣圖。
[in] iid
類型: REFIID
要擷取之介面的標識碼。
[out] updateObject
類型: void**
接收 iid 參數中指定的型別介面指標。 此參數不得為 NULL。
[out] updateOffset
類型: POINT*
應用程式應該繪製更新內容的介面位移。 這個位移會參考更新矩形的左上角。
傳回值
類型: HRESULT
如果函式成功,它會傳回S_OK。 否則,它會傳回 HRESULT 錯誤碼。
備註
此方法可讓應用程式以累加方式更新 DirectComposition 介面物件的內容。 應用程式必須使用下列順序:
- 呼叫 BeginDraw 以起始累加式更新。
- 使用擷取的介面做為轉譯目標,並在擷取的位移繪製更新的內容。
- 呼叫 IDCompositionSurface::EndDraw 方法以完成更新。
如果 DirectComposition 介面對像是從 DirectComposition 裝置建立,或是使用相關聯 Direct2D 裝置建立的 Surface Factory 本身, iid 參數只能__uuidof (ID2D1DeviceContext) 。 特別是,應用程式必須呼叫 DCompositionCreateDevice2 函式或 IDCompositionDevice2::CreateSurfaceFactory 方法,並將 Direct2D 裝置當做 renderingDevice 參數。 如果 DirectComposition 介面是透過未與 Direct2D 裝置相關聯的 Surface Factory 建立,或直接透過 IDCompositionDevice2 介面建立,且裝置未直接與 Direct2D 裝置相關聯,則傳遞 __uuidof (ID2D1DeviceContext) ,因為 iid 參數會導致此方法傳回E_INVALIDARG。
如果應用程式成功擷取 Direct2D 裝置內容做為更新物件,則應用程式不應該在傳回的 Direct2D 裝置內容上呼叫 ID2D1DeviceContext::BeginDraw 或 ID2D1DeviceContext::EndDraw 方法。
擷取的位移不一定與要求的更新矩形左上角相同。 應用程式必須轉換其呈現基本類型,以在與輸入矩形相同的寬度和高度的矩形內繪製,但在指定的位移中。 應用程式不應該在此矩形外部繪製。
如果 updateRectangle 參數為 NULL,則會更新整個介面。 在此情況下,由於擷取的位移可能尚未 (0,0) ,因此應用程式仍然需要據以轉換其轉譯基本類型。
如果介面不是虛擬表面,則應用程式第一次針對特定非虛擬表面呼叫此方法時,更新矩形必須透過在要求的更新矩形中指定完整表面,或將 NULL 指定為 updateRectangle 參數,來涵蓋整個表面。 對於虛擬表面,第一次呼叫可能是表面的任何子矩形。
因為每次呼叫這個方法可能會擷取 updateObject 介面中的不同物件,所以應用程式不應該快取所擷取的介面指標。 應用程式在完成繪圖時,應該立即釋放擷取的指標。
擷取的介面矩形不包含先前的點陣圖內容。 應用程式必須先清除轉譯目標,或發出足夠的轉譯基本類型,以完整涵蓋更新矩形,來更新矩形中的每個圖元。 因為未定義更新介面的初始內容,所以無法更新每個圖元會導致未定義的行為。
一次只能更新一個 DirectComposition 介面。 應用程式必須在一個介面上暫停繪圖,才能開始或繼續在另一個介面上繪製。 如果應用程式針對相同表面或屬於相同 DirectComposition 裝置的另一個表面呼叫 BeginDraw 兩次,而不需要對 IDCompositionSurface::EndDraw 進行插播呼叫,第二次呼叫就會失敗。 如果應用程式呼叫 IDCompositionDevice2::Commit 而不呼叫 EndDraw,則更新會保持擱置中。 更新只有在應用程式呼叫 EndDraw 之後才會生效,然後呼叫 IDCompositionDevice2::Commit 方法。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | dcomp.h |
程式庫 | Dcomp.lib |
Dll | Dcomp.dll |