如何使用矩形剪辑对象进行剪辑
注意
对于Windows 10上的应用,我们建议使用Windows。UI。合成 API 而不是 DirectComposition。 有关详细信息,请参阅 使用视觉层现代化桌面应用。
本主题演示如何使用矩形剪辑对象来剪辑视觉对象或可视化树。
本主题中的示例定义以鼠标位置为中心的矩形剪辑,并将剪辑应用于以合成目标窗口工作区为中心的视觉对象。 此屏幕截图显示将矩形剪辑对象应用于视觉对象的结果。
需要了解的事项
技术
先决条件
- C/C++
- Microsoft Win32
- 组件对象模型 (COM)
说明
步骤 1:初始化 DirectComposition 对象
- 创建设备对象和组合目标对象。
- 创建视觉对象,设置其内容,并将其添加到可视化树。
有关详细信息,请参阅 如何初始化 DirectComposition。
步骤 2:创建矩形剪辑对象
使用 IDCompositionDevice::CreateRectangleClip 方法创建矩形剪辑对象的实例。
HRESULT hr = S_OK;
// Create the rectangle clip object.
if (m_pClip == NULL)
{
hr = m_pDevice->CreateRectangleClip(&m_pClip);
}
步骤 3:设置矩形剪辑对象的属性
调用矩形剪辑对象的 IDCompositionRectangleClip 接口的方法以设置剪辑矩形的属性。
以下示例定义以当前鼠标位置为中心的剪辑矩形。 成员m_offsetX
m_offsetY
变量包含视觉对象的 OffsetX 和 OffsetY 属性的值。
if (SUCCEEDED(hr))
{
// Get the location of the mouse.
POINT ptMouse = { };
GetCursorPos(&ptMouse);
ScreenToClient(m_hwnd, &ptMouse);
// Create a 100-by-100 pixel rectangular clip that is
// centered at the mouse location, and is mapped to
// the rectangle of the visual.
m_pClip->SetLeft((ptMouse.x - m_offsetX) - 50.f);
m_pClip->SetTop((ptMouse.y - m_offsetY) - 50.f);
m_pClip->SetRight((ptMouse.x - m_offsetX) + 50.f);
m_pClip->SetBottom((ptMouse.y - m_offsetY) + 50.f);
}
请注意, IDCompositionRectangleClip 接口包括以下方法,用于定义具有圆角的剪辑矩形:
步骤 4:设置视觉对象的 Clip 属性
使用 IDCompositionVisual::SetClip 方法将视觉对象的 Clip 属性与矩形剪辑对象相关联。
if (SUCCEEDED(hr))
{
// Set the rectangle clip object as the Clip property
// of the visual.
hr = m_pVisual->SetClip(m_pClip);
}
步骤 5:提交合成
调用 IDCompositionDevice::Commit 方法,将命令批处理提交到 Microsoft DirectComposition 进行处理。 应用剪辑矩形的结果显示在目标窗口中。
if (SUCCEEDED(hr))
{
// Commit the visual to be composed and displayed.
hr = m_pDevice->Commit();
}
步骤 6:释放 DirectComposition 对象
当不再需要矩形剪辑对象以及设备对象、合成目标对象以及任何视觉对象时,请务必释放矩形剪辑对象。 以下示例调用应用程序定义的 SafeRelease 宏来释放 DirectComposition 对象。
SafeRelease(&m_pClip);
SafeRelease(&m_pDevice);
SafeRelease(&m_pD3D11Device);
SafeRelease(&m_pCompTarget);
SafeRelease(&m_pVisual);
SafeRelease(&m_pSurface);
相关主题