选择正确的 Windows 触控方法

本部分介绍你可以使用的不同 Windows Touch 方法。

可以通过多种方式使用 Windows Touch 功能增强应用程序。 在采用方法之前,应考虑要对应用程序执行的操作。 以下方案是 Windows Touch 的典型方案:

  • 你希望应用程序的行为与旧版 Windows 相同,但希望 Windows Touch 消息的行为保持一致。
  • 需要在应用程序中支持自定义对象旋转、平移、平移或缩放。
  • 你希望应用程序对 Windows 触控手势进行精细解释,或者对专门针对 Windows Touch 输入进行优化的应用程序中解释多次触摸。
  • 你有一个应用程序使用 RealTimeStylus 对象,并希望使用 Windows Touch 功能对其进行增强。

你希望应用程序的行为与旧版 Windows 中的行为一样

在 Windows 7 中,应用程序默认生成启用 Windows Touch 功能的消息。 例如,平移手势触发WM_*SCROLL 消息。 除了平移支持外,Windows 7 中的默认WM_GESTURE处理程序还支持边界反馈、缩放以及按和点击。 边界反馈也通过旧版支持启用。 有关手势如何映射到消息的详细信息,请参阅 Windows 触控手势概述 。 仅需要此基本功能的开发人员不需要直接使用 Windows Touch API。

注意

自定义滚动条处理程序必须支持 WM_VSCROLL 消息的 SM_THUMBPOSITION 请求,并且必须支持 WM_HSCROLL 消息的 SB_LINELEFT 请求和 SB_LINERIGHT 请求。

需要自定义对象旋转、平移、平移或缩放支持

如果你希望对触控的支持有限,但 Windows 7 提供的默认行为不足以满足你的应用程序的需求,你可以使用手势来增强应用程序。 通过使用手势,可以通过处理 WM_GESTURE 消息来解释手势命令。 有关手势的详细信息,请参阅 Windows 触控手势部分。 如果应用程序只需要支持高粒度旋转、改进的缩放支持或单指平移,则手势是 Windows Touch 开发的最佳方法。 除了解释手势消息外,还可以选择支持边界反馈。 有关边界反馈的详细信息,请参阅 Windows Touch 编程参考边界反馈部分。 在 Windows 7 中,命令提示符和 Internet Explorer 利用边界反馈和手势。

你需要对多个触摸点进行精细的手势解释或自定义处理

如果想要比 WM_GESTURE 消息提供的更具体的手势控制,或者想要解释多个对象上的多个手势,则应使用操作处理器。 操作处理器本质上是手势的超集。 使用操作处理器需要为原始触摸数据馈送的操作实现事件接收器。

如果除了解释手势之外,还需要简单的对象物理,则应将惯性处理器与操作处理器结合使用。 惯性处理器通过在操作完成后从操作处理器获取速度值来与操作处理器配合使用。

如果要解释应用程序中的多个接触点,则应为 WM_TOUCH 消息创建消息处理程序。

重要

Windows 11 及更高版本

默认情况下,某些三指和四指触摸交互在 Windows 应用中不起作用。

默认情况下,系统现在使用三指和四指触摸交互来执行窗口切换或最小化和虚拟桌面更改等操作。 由于这些交互现在在系统级别进行处理,因此应用的功能可能会受此更改的影响。

为支持应用程序中的三指或四指交互,引入了新的用户设置,用于指定系统是否要处理这些交互:

蓝牙 & 设备 > 触摸 > “三指和四指触摸手势”

当设置为“开”(默认)时,系统将处理所有三指和四指交互(应用将不能支持它们)。

当设置为“关”时,应用可支持三指和四指交互(不会交由系统处理)。

如果应用程序必须支持这些交互,建议你告知用户此设置,并提供一个链接,将设置应用启动到相关页面(ms-settings:设备触摸)。 有关更多详细信息,请参阅 Launcher.LaunchUriAsync 方法

你想要为使用 RealTimeStylus 的应用程序启用 Windows Touch 输入

如果要在平板电脑平台上为多个联系人启用输入,则必须实现解释 Windows Touch 数据的自定义 RealTimeStylus 插件。 Microsoft 引入了 ITablet3IRealTimeStylus3 接口,以启用 RealTimeStylus 插件中多个触点的输入。 这些接口简化了扩展 RealTimeStylus 插件以支持多个接触点。

若要检查是否启用对多个联系人的支持,请调用 IsMultiTouch。 若要检查受支持的联系人数,请调用 GetMaximumCursors。 若要启用或禁用多个联系人支持,请调用 MultiTouchEnabled

注意

如果未在 RealTimeStylus 中启用多个接触点,将收到平移和缩放等手势消息。

编程指南