鼠标消息和系统事件的时间线

执行给定操作时, (前缀为 ISG_) 的系统事件几乎瞬间由应用程序发送和接收。 (前缀为 WM_) 的鼠标消息在执行操作时发送,应用程序会在 Microsoft Windows 消息传送服务处理事件所花费的时间之后接收。 此外, CursorDownCursorUp 是从笔硬件接收的笔事件。 当平板电脑触控笔触摸屏幕和从屏幕上抬起时,它们将分别发送。

触控笔事件和鼠标消息不同步。 无法保证相应的鼠标消息和笔事件将按特定顺序发生。 下图显示了所发送的系统和鼠标事件的预期序列(但并非始终可预测)。 请注意,在图表中,当检测到系统手势事件时,鼠标事件会延迟。

用于笔输入的系统和鼠标事件的预期序列

重要的实现注意事项

针对鼠标消息和系统事件进行开发时,请考虑以下事项:

  • 无论使用的是笔还是鼠标,笔事件和鼠标消息都会发送到应用程序。
  • 如果应用程序同时侦听笔和鼠标消息,则很难预测消息的关系以及最终行为。 触控笔事件和鼠标消息不同步。 无法保证相应的鼠标消息和笔事件 ((如WM_LBUTTONDOWN和 ISG_TAP)或WM_LBUTTONDBLCLK和 ISG_DBLTAP) 将按特定顺序发生。 这些消息之间的关系很复杂。
  • 建议不要在同一应用程序功能中混合匹配鼠标和笔事件。 例如,响应 CursorDownMouseUp 的应用程序功能现在或未来版本的平板电脑 SDK 可能无法按预期运行。
  • 对于保留通过事件序列,如果用户在序列完成之前拖动平板电脑笔,则发送的事件对应于向左拖动。 例如,当拖动开始时,将发送 ISG_DRAG 和WM_LBUTTONDOWN。 最终抬起触控笔时,将发送 CursorUp 和WM_LBUTTONUP。 系统手势事件可能不会立即触发,因为它必须确定正在发生的事件类型。
  • 与使用鼠标双击相比,使用平板电脑笔双击通常不太准确。 这源于使用平板电脑笔执行双击的固有性质。 由于用户必须抬起平板电脑笔来执行双击,因此点击之间的时间通常大于双击的相应单击间隔时间。 此外,平板电脑笔的两次点击可能发生在屏幕坐标处,这比单击鼠标的两次点击距离更远。 为了适应这一点,Windows XP Tablet PC Edition 具有双击的两次点击之间的时空距离设置,这与双击的鼠标设置是分开的。 可以在 控制面板 中的“平板电脑”和“笔设置”中调整这些设置。

出于这些注意事项,应用程序应只侦听一组消息,而不是同时侦听这两组消息。 如果要生成启用了笔的应用程序,请仅侦听系统和笔消息。 这些消息是可预测的,并且适用于平板电脑笔。 如果要生成未启用笔的应用程序,请仅侦听鼠标消息。