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 |