使用直接作 API 可以创建出色的平移、缩放和拖动用户体验。 为此,它会处理区域或对象的触摸输入,生成输出转换,并将转换应用于 UI 元素。 可以使用直接作优化响应能力,并通过线程外输入处理、可选的线程外输入命中测试和输入/输出预测来降低延迟。
使用直接作处理触摸交互的任何应用程序都会显示符合常见用户交互 准则的流畅 Windows 8 动画和交互反馈行为。
开发人员受众
直接作 API 适用于了解 C/C++的经验丰富的开发人员,对 组件对象模型(COM)有扎实的理解,并且熟悉 Windows 编程概念。
运行时要求
直接作已在 Windows 8 中引入。 它同时包含在 32 位和 64 位版本中。
为何使用 DirectManipulation
以简单且一致的方式处理交互
直接作的工作原理是预先声明区域或对象的行为和交互。 例如,通常为平移和缩放配置网页。 在运行时,输入随后通过简单的 API 调用与此区域/对象关联。 从这一点开始,直接作将执行处理输入、应用约束和个性以及生成输出转换的所有繁重任务。
生成响应式触摸应用程序
为了优化响应能力和尽量减少延迟,直接作处理发生在独立于 UI 线程的单独线程上。 因此,输出转换可以与 UI 线程上的活动并行运行。 UI 线程活动可能包括应用程序逻辑、呈现、布局以及使用处理器上的周期的其他任何内容。
实现灵活性
直接作随附的接口为输入处理、交互识别、反馈通知和 UI 更新提供了全面的支持。 这些接口还包含 DirectComposition等系统服务。
基本概念
最基本的直接作实现包括 视区、内容和 交互。 视区 是能够接收和处理用户交互输入的区域。 它也是最终用户可见的内容区域。 内容 是最终用户可以看到的实际对象,以及响应用户交互时移动或缩放的内容。 直接作支持的主要用户 交互(也称为 作)是平移和缩放。 这些交互将转换或缩放转换分别应用于视区中的内容。 可以在单个窗口中配置多个视区(每个视口都有自己的内容),以创建丰富的 UI 体验。
下图显示了平移前后的基本直接作实现。
在直接作初始化期间,将实例化 DCompDirectManipulationCompositor 对象,并与 Direct Manipulation 相关联。 此对象是 DirectComposition的包装器,它是系统组合器。 该对象负责应用输出转换和驱动视觉更新。
联系人表示由 WM/_POINTERDOWN 消息中提供的 pointerId 标识的触摸点。 收到 WM_POINTERDOWN 消息时,应用程序会 SetContact调用。 应用程序向直接作通知应处理的联系人,以及应对这些联系人的视区。 键盘和鼠标输入具有特殊的 pointerId 值,以便直接作可以适当地处理它们。
在上面的基本案例中,当 SetContact 称为一些事情发生时:
- 当用户执行平移时,会将 WM/_POINTERCAPTURECHANGED 消息发送到应用程序,以通知该联系人已被直接作使用。
- 当用户移动移动时,视区会触发 DirectComposition 包装器用来驱动屏幕视觉更新的事件。 在视区中平移的用户,内容将显示为在联系人下顺利移动。
- 当用户解除联系人时,用户看到内容在转换为惯性动画时继续移动,逐渐减速,直到它到达最后的休息位置。
处理键盘和鼠标输入
直接作允许通过 ProcessInput API 从应用程序 UI 线程手动转发键盘和鼠标消息,以便直接作可以正确处理它们。
DirectManipulation 和 HWND
直接作与 Win32 HWND 相关联,以便接收和处理该窗口的指针输入消息。 当 Direct Manipulation 计算输出值时,它会对在应用程序中实现的直接作 组件对象模型(COM) 对象进行异步回调。 这些回调将通知应用程序应用于对象的转换。 直接作通过调用 激活在指定的 HWND 上激活。
支持文档
在 DirectManipulation 中使用多个视区