系统事件和鼠标消息

应用程序通过发送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

如果比较正确,则此鼠标消息由平板电脑触控笔或触摸屏生成。 在所有其他情况下,可以假定此消息是由鼠标设备生成的。

getMessageExtraInfo 返回的低 8 位是可变的。 在这些位中,7(由 0x7F 屏蔽的下 7 位)用于表示游标 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事件。
拖动选择,就像从 IP 开始时Microsoft Word 一样;选择多个单词;拖动,就像在 Windows 中拖动对象时一样;滚动。
按住后跟拖动
右拖动
点击屏幕以选择要移动的对象。 按住鼠标图标,然后拖动以移动对象。 抬起笔以显示快捷菜单。
当笔关闭一段时间时,ISG_HOLDENTER发送。 拖动启动时发送ISG_RIGHTDRAG。
拖动启动时发送WM_RBUTTONDOWN,后跟一系列鼠标移动消息,后跟WM_RBUTTONUP事件。
拖动,就像拖动对象或选定内容后跟上下文菜单一样。
笔悬停
鼠标悬停
将笔保持稳定在距离屏幕的一小段距离。
最初发送ISG_HOVERENTER事件。 悬停间隔完成后,ISG_HOVERLEAVEis发送。
无鼠标消息等效。
显示工具提示、滚动滚动效果和其他鼠标悬停行为。
空中摇摆
显示 平板电脑输入面板。 无鼠标等效项。
将笔从一侧快速移动到一侧,按住上方的提示,但在屏幕范围内。
事件不会传递到应用程序。
无鼠标消息等效。
特定于平板电脑的新增功能。

 

指定触笔和触摸交互

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