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 方法时使用 surface 指针来设置一个或多个视觉对象的内容。 设置内容后,视觉对象将编写指定分层窗口的内容,只要窗口是分层的。 如果取消窗口的图层,则窗口内容将从合成树的输出中消失。 如果稍后重新分层窗口,只要窗口内容仍与视觉对象关联,该窗口内容将重新显示。

如果调整窗口的大小,将重新组合受影响的视觉对象。

窗口的内容不会缓存超过窗口的生存期。 也就是说,如果窗口被销毁,受影响的视觉对象将停止撰写窗口。

如果将窗口移出屏幕或调整为零,则系统停止撰写视觉对象的内容。 当需要隐藏原始窗口,同时允许系统继续撰写视觉对象的内容时,应使用带有 DWMWA_CLOAK 标志的 DwmSetWindowAttribute 函数来“隐藏”分层子窗口。 有关详细信息,请参阅 如何对分层子窗口的位图进行动画处理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
Library Dcomp.lib
DLL Dcomp.dll

另请参阅

IDCompositionDevice

IDCompositionDevice::CreateSurface

IDCompositionDevice::CreateSurfaceFromHandle