系统事件和鼠标消息

应用程序通过发送 Microsoft Windows 鼠标消息和系统事件来整合数位板笔的最佳设计和使用。 应用程序接收每次笔移动或操作的两组事件。 然后,应用程序根据操作上下文选择要使用的适当事件。 Windows 鼠标消息非常适合指向和选择活动,你应该将其用于涉及与用户界面 (UI) 元素交互的活动。 笔事件非常适合实时墨迹应用程序、笔操作和手写。

注意

无论使用的是笔还是鼠标,笔事件和鼠标消息都会发送到应用程序。

区分笔输入与鼠标和触摸

当应用程序收到鼠标消息(例如 WM_LBUTTONDOWN)时,它可以调用 GetMessageExtraInfo 函数来评估该消息是源自笔还是鼠标设备。

GetMessageExtraInfo 返回的值需要针对 0xFFFFFF00 进行掩码检查,然后与 0xFF515700 进行比较。 以下定义更清楚地展示了这一点:

#define MI_WP_SIGNATURE 0xFF515700
#define SIGNATURE_MASK 0xFFFFFF00
#define IsPenEvent(dw) (((dw) & SIGNATURE_MASK) == MI_WP_SIGNATURE

如果比较结果为 true,则此鼠标消息是由 Tablet PC 笔或触摸屏生成的。 在所有其他情况下,可以假设该消息是由鼠标设备生成的。

GetMessageExtraInfo 返回的较低 8 位是可变的。 在这些位中,7 位(较低的 7 位,由 0x7F 掩码)用于表示光标 ID,零表示鼠标或表示笔 ID 的变量值。 此外,在 Windows Vista 中,第八位(由 0x80 掩码)用于区分触摸输入和笔输入(0 = 笔,1 = 触摸)。

有关详细信息,请参阅指针设备输入触摸输入

支持的系统笔势

下表列出了当前 Windows XP Tablet PC Edition 中包含的系统笔势,详细说明了相应的笔操作和系统事件,并显示了它们与传统鼠标操作的关系。

笔势 鼠标操作 笔势说明 事件消息 鼠标消息 基于 Windows 的应用程序中的行为
点击
左键单击
使用笔点击屏幕一次。
提起笔时发送 ISG_TAP。
提起笔时发送 WM_LBUTTONDOWN 和 WM_LBUTTONUP。
从菜单或工具栏选择命令,选择命令后执行操作,设置插入点 (IP),显示选择反馈。
双击
双击
连续两次点击屏幕。
第二次点击(向下)时发送 ISG_DOUBLETAP。 第一次点击时发送 ISG_TAP 事件。
第二次点击(向下)时发送 WM_LBUTTONDBLCLK。 第一次点击(向上)时发送 WM_LBUTTONDOWN 和 WM_LBUTTONUP,如同点击一次。
选择单词,打开文件或文件夹。
长按
右键单击
点击并按住屏幕直至出现鼠标图标,然后提起笔以显示快捷菜单。 应用程序可以选择执行与提起笔时显示右键单击菜单不同的操作。
当笔已经按下足够长时间时发送 ISG_HOLDENTER。 当笔提起并右键单击时发送 ISG_RIGHTTAP。
当右键单击发生时(当笔提起时)发送 WM_RBUTTONDOWN 和 WM_RBUTTONUP。
显示快捷菜单。
按住
左键单击
点击并按住屏幕,直至鼠标图标出现再消失。 当用户意外长按并想要恢复为仅点击时,他们可能会这样做。
提起笔时发送 ISG_TAP。
提起笔时发送 WM_LBUTTONDOWN 和 WM_LBUTTONUP。
长时间单击左键。 不存在鼠标等效项。 这是用户长时间按住时的回退措施。 事件还原为点击。
拖动
向左拖动
点击屏幕选择要移动的对象,选择对象后拖动。
在拖动开始后发送 ISG_DRAG。
在拖动开始后发送 WM_LBUTTONDOWN,接着发送一系列鼠标移动消息,然后发送 WM_LBUTTONUP 事件。
拖动选择,就像在 Microsoft Word 中从 IP 开始一样;选择多个单词;拖动,就像在 Windows 中拖动对象一样;滚动。
长按然后拖动
向右拖动
点击屏幕选择要移动的对象。 按住直至出现鼠标图标,然后拖动以移动对象。 提起笔以显示快捷菜单。
当笔已按下一段时间后发送 ISG_HOLDENTER。 拖动开始后发送 ISG_RIGHTDRAG。
在拖动开始后发送 WM_RBUTTONDOWN,接着发送一系列鼠标移动消息,然后发送 WM_RBUTTONUP 事件。
拖动,就像拖动对象或选择,然后拖动上下文菜单一样。
笔悬停
鼠标悬停
在距屏幕一小段距离处稳定地按住笔。
初次发送 ISG_HOVERENTER 事件。 当悬停间隔完成时,发送 ISG_HOVERLEAVE。
没有等效的鼠标消息。
显示工具提示、鼠标悬停效果和其他鼠标悬停行为。
空中摇晃
显示 Tablet PC 输入面板。 没有鼠标等效项。
快速左右移动笔,将笔尖保持在屏幕上方但在屏幕范围内。
不会将事件传递给应用程序。
没有等效的鼠标消息。
新指令,特定于 Tablet PC。

 

指定手写笔和触摸交互

默认情况下,窗口将接收所有系统笔势事件并使用默认的交互模型。 此模型的某些部分可能会干扰应用程序,因此可以通过响应 WndProc 中的 WM_TABLET_QUERYSYSTEMGESTURESTATUS 消息 来选择性地禁用它们。