如何使用矩形剪辑对象进行剪裁
注意
对于 Windows 10 上的应用,建议使用 Windows.UI.Composition API 而不是 DirectComposition。 有关详细信息,请参阅 使用可视化层实现桌面应用的现代化。
本主题演示如何使用矩形剪辑对象来剪裁视觉对象或可视化树。
本主题中的示例定义一个矩形剪辑,该剪辑在鼠标位置居中,并将该剪辑应用于在合成目标窗口的工作区中居中的视觉对象。 此屏幕截图显示了将矩形剪辑对象应用于视觉对象的结果。
需要了解的事项
技术
先决条件
- C/C++
- Microsoft Win32
- 组件对象模型 (COM)
Instructions
步骤 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);
相关主题