轻拂手势
Windows Vista 包含一组 8 个基本 轻拂手势。 轻拂是与滚动操作和命令关联的快速线性笔移动。
轻拂详细信息
轻拂功能允许用户通过用笔快速手势执行常见操作,为用户提供了与 Tablet PC 交互的新方式。 轻拂与正常的用户操作(如左右点击、滚动和墨迹书写)共存,并且不会中断。
轻拂是一种单向笔势,它要求用户以快速轻拂动作联系数字化器。 轻拂的特点是高速和高直线度。 轻拂按其方向标识。 轻拂可以在对应于基数和辅助指南针方向的八个方向上进行。
操作或轻拂操作是响应轻拂时执行的操作或快捷方式。 轻拂映射到操作。 下图显示了对应于其笔触操作的八个笔触的关系图。
当用户将触控笔移到 Tablet PC 的数字化器上时,硬件会生成笔数据包,这些数据包将路由到 Tablet PC 平台的笔输入子系统。 通常,如果笔用作鼠标的替代项,则笔输入子系统会获取这些笔数据包,并将其发送给负责处理鼠标输入的 Windows 组件 User32(可能进行修改)。 如果在墨迹书写图面上使用笔,则呈现墨迹,而不是生成鼠标数据包。
笔输入子系统中实现了轻拂检测例程。 轻拂检测从向下笔开始,一直持续到以下任一操作:
接收的数据包序列确定不是轻拂或
笔向上发生。
发生轻拂检测时,笔数据包会保留,不会发送到系统。 必须执行此操作,因为发送数据包可能会干扰执行的轻拂操作。 例如,在映射到复制操作的轻拂期间发送数据包会消除所选内容,这意味着在发送操作时不会复制任何内容。
当数据包流入笔输入子系统时,轻拂检测例程将计算所执行动作的长度、速度、时间和曲率指标。 每个数据包到达后,检测例程会更新其中每个指标。 一旦任何指标超出将构成轻弹的指标,轻弹检测就会结束,数据包就会发送。
检测到轻弹的位置
轻拂手势的实现原因是拖动通常执行得相当慢。 用户必须首先定位拖动的起点,执行拖动,然后定位到终点。 通常,这需要很长时间才能获得轻弹的资格。 然而,在墨迹书写表面上,快速笔划将有资格为轻拂频繁发生:交叉“t”是一个常见示例。 因此,默认情况下,在墨迹书写图面上关闭轻拂检测,并在系统范围内打开。
焦点问题
检测到轻拂后,将开始一系列事件,最终导致系统执行特定操作以响应发生的轻拂。 首先,笔输入子系统中的检测例程确定应将笔触发送到哪个窗口。 这通常是具有焦点的窗口,但也有例外。 对于滚动轻拂,该轻拂将发送到发生轻拂的窗口。 请注意,这不一定是具有焦点的窗口。 将轻拂发送到没有焦点的窗口时,焦点不会更改为该窗口。
轻拂操作
确定目标窗口后,该窗口可能会根据默认或编程的事件行为处理轻拂本身。 应用程序可以根据应用程序以及轻拂的方向和位置响应最合适的操作。 例如,在映射应用程序中,向上和向下轻拂可能会放大或缩小,而不是按照默认行为的预期方式垂直滚动。
若要提醒应用程序发生轻拂,会向应用程序发送一条窗口消息。 此窗口消息包含轻拂的起点和轻拂的方向。 如果应用程序处理此窗口消息,则笔输入子系统不会执行进一步的操作。
检测到轻拂后,屏幕上会显示表示轻拂操作的视觉反馈。 此反馈有两个用途。 首先,它为用户确认轻拂成功。 其次,它会提醒用户执行的操作,帮助用户将轻拂方向与其关联的操作连接起来。
轻弹反馈由两部分组成:表示操作的图标和包含操作名称的标签。 标签显示在图标下方。 在检测到轻扫后立即显示反馈。 尽管应用程序可以通过处理轻拂窗口消息来自定义其行为以响应轻拂,但应用程序无法禁用或修改轻拂反馈。
预计大多数应用程序不会识别轻弹,因此不会处理上述窗口消息。 如果未处理消息,笔输入子系统将执行进一步操作。 首先,它查找与检测到的轻拂方向关联的操作。 接下来,它将执行下表中描述的步骤 (,) 导致目标窗口执行此操作。 对于许多轻拂操作,这涉及到发送应用程序命令,但实现的某些操作不会。
处理应用程序命令
应用程序应响应可能分配给轻拂手势的任何应用程序命令。 如果应用程序无法响应 WM_TABLET_FLICK消息,Windows Vista 随后会发送适用的 WM_APPCOMMAND 通知,然后发送 WM_KEYDOWN 通知。
下面是可以分配给轻拂的应用程序命令列表,以及可能发送的备份击键消息。
命令 | 备份击键 |
---|---|
APPCOMMAND_BROWSER_BACKWARD |
无 |
APPCOMMAND_BROWSER_FORWARD |
无 |
APPCOMMAND_COPY |
Ctrl+C |
APPCOMMAND_PASTE |
Ctrl+V |
APPCOMMAND_UNDO |
Ctrl+Z |
APPCOMMAND_DELETE |
Del |
APPCOMMAND_CUT |
Ctrl+X |
APPCOMMAND_OPEN |
Ctrl+O |
APPCOMMAND_PRINT |
Ctrl+P |
APPCOMMAND_SAVE |
Ctrl+S |
APPCOMMAND_REDO |
Ctrl+Y |
APPCOMMAND_CLOSE |
编辑命令(如“复制”、“粘贴”、“剪切”和“删除”)可能会针对所选内容或位于轻拂手势底部的对象。 如果没有选择,可以使用 FLICK_POINT结构 中的数据来确定哪些对象(如果有)可能是编辑命令的目标。