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

另請參閱

IDCompositionDevice

IDCompositionDevice::CreateSurface

IDCompositionDevice::CreateSurfaceFromHandle