DirectComposition 的最佳做法

注意

对于 Windows 10 上的应用,建议使用 Windows.UI.Composition API 而不是 DirectComposition。 有关详细信息,请参阅 使用视觉对象层实现桌面应用的现代化

本主题介绍使用 Microsoft DirectComposition 的最佳做法。

最佳实践

下表提供了建议使用 Microsoft DirectComposition 视觉对象的做法。

实践 说明
创建 DirectComposition 设备后,调用 IDCompositionDevice::CheckDeviceState 方法来响应每个 WM_PAINT 消息,以确保设备仍然有效。
如果 Microsoft DirectX Graphics Infrastructure (DXGI) 设备丢失,则与 DXGI 设备关联的 DirectComposition 设备也会丢失。 当检测到设备丢失时,DirectComposition 会将 WM_PAINT 消息发送到所有窗口。 调用 CheckDeviceState 以响应每 条WM_PAINT 消息可让你确定 DirectComposition 设备对象是否仍然有效,如果不是,则执行恢复内容的步骤。
有关详细信息,请参阅 Device 对象
仅创建合成或动画所需的视觉对象数量,并在 DirectComposition 使用完视觉对象后立即销毁这些视觉对象。
DirectComposition 使用图形处理单元 (GPU) ,这是应用程序与其他应用程序和操作系统共享的资源。 这种做法确保所有应用程序和操作系统都会收到足够的 GPU 资源。
有关详细信息,请参阅 视觉对象
不要通过将不透明度设置为 0%来隐藏视觉对象;而是从可视化树中删除视觉对象。
将不透明度设置为 0% 需要比从可视化树中删除系统资源更多的系统资源。
有关详细信息,请参阅 不透明度可视化树
不要通过将零大小的空 () 剪裁矩形应用于视觉对象来隐藏视觉对象。 相反,请从可视化树中删除视觉对象。
从可视化树中删除视觉对象比应用空剪辑矩形的性能更好。
有关详细信息,请参阅 剪辑
如果不需要剪辑矩形(例如包含视觉对象整个位图内容的剪辑矩形),请不要将剪辑矩形应用于视觉对象。
不必要的剪辑矩形会损害系统性能。
有关详细信息,请参阅 剪辑
如果需要较大的单色位图,请创建较小的位图图面,然后应用比例转换,而不是创建全尺寸图面。
将缩放转换应用于较小的图面比全尺寸图面占用的系统资源更少。
有关详细信息,请参阅 位图对象转换
避免将 3D 转换应用于可视化树的多个级别,例如父级及其后代 () 。
将 3D 转换应用于可视化树的多个级别可能会产生意外的结果,因为 3D 转换不会在树中成倍增加。 例如,在子级上绕 y 轴旋转 90 度,在父级上绕 y 轴旋转 90 度,会导致两个视觉对象旋转为无。
有关详细信息,请参阅效果

安全注意事项

以下文章提供了编写安全 C++ 代码的指导。

如何使用 DirectComposition