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