IDCompositionDevice::CreateSurfaceFromHwnd 方法 (dcomp.h)
建立包裝函式物件,代表分層視窗的點陣化,而且可以與視覺效果建立關聯以進行組合。
語法
HRESULT CreateSurfaceFromHwnd(
HWND hwnd,
IUnknown **surface
);
參數
hwnd
類型: [in] HWND
要為其建立包裝函式之分層視窗的句柄。 使用 CreateWindowEx 函式建立視窗時指定WS_EX_LAYERED,或在建立窗口之後透過 SetWindowLong 設定WS_EX_LAYERED,即可建立分層視窗。
surface
類型:[out] IUnknown**
新的組合介面物件。 此參數不得為 NULL。
傳回值
類型: HRESULT
如果函式成功,它會傳回S_OK。 否則,它會傳回 HRESULT 錯誤碼。 如需錯誤碼的清單,請參閱 DirectComposition 錯誤 碼。
備註
您可以使用呼叫 IDCompositionVisual::SetContent 方法的介面指標來設定一或多個視覺效果的內容。 設定內容之後,只要視窗分層,視覺效果就會組成指定分層窗口的內容。 如果視窗未圖層,則視窗內容會從組合樹狀結構的輸出中消失。 如果視窗稍後重新分層,只要窗口內容仍然與視覺效果相關聯,就會重新出現。
如果視窗重設大小,則會重新撰寫受影響的視覺效果。
視窗的內容不會快取超過視窗的存留期。 也就是說,如果視窗已終結,受影響的視覺效果就會停止撰寫視窗。
如果視窗在螢幕外移動或重設大小為零,系統就會停止撰寫視覺效果的內容。 當您需要隱藏原始視窗時,您應該使用 DwmSetWindowAttribute 函式搭配 DWMWA_CLOAK 旗標來「隱藏」分層子窗口,同時讓系統繼續撰寫視覺效果的內容。 如需詳細資訊,請參閱 如何以動畫顯示分層子視窗的位圖 和 DirectComposition 分層子視窗範例。
範例
下列代碼段會建立包裝函式物件,代表分層視窗的點陣化。
HRESULT hr = S_OK;
IDCompositionVisual *pVisual = nullptr;
IUnknown *pSurface = nullptr;
// Create a visual. g_pDevice is the IDCompositionDevice pointer of a
// device object created earlier.
hr = g_pDevice->CreateVisual(&pVisual);
if (SUCCEEDED(hr))
{
// Create a surface that contains the image of the layered child
// window identified by the g_hwndChild window handle (HWND).
hr = g_pDevice->CreateSurfaceFromHwnd(g_hwndChild, &pSurface);
}
if (SUCCEEDED(hr))
{
// Set the content of the Control child visual.
hr = pVisual->SetContent(pSurface);
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | dcomp.h |
程式庫 | Dcomp.lib |
Dll | Dcomp.dll |