WM_POINTERLEAVE 消息

当指针离开窗口上的检测范围时, (将鼠标悬停) 或指针在窗口边界外移动时发送到窗口。

窗口通过其 WindowProc 函数接收此消息。

[!重要提示]
桌面应用应感知 DPI。 如果你的应用无法识别 DPI,则指针消息中包含的屏幕坐标和相关结构可能会由于 DPI 虚拟化而显示不准确。 DPI 虚拟化为不识别 DPI 的应用程序提供自动缩放支持,并且默认情况下处于活动状态, (用户可以将其关闭) 。 有关详细信息,请参阅 编写高 DPI Win32 应用程序

#define WM_POINTERLEAVE                 0x024A

参数

wParam

包含指针标识符和其他信息。 使用以下宏检索此信息。

  • GET_POINTERID_WPARAM (wParam) :指针标识符。
  • IS_POINTER_INRANGE_WPARAM (wParam) :指示此消息是否由尚未离开检测范围的指针生成。 当指针离开窗口的检测范围时,不会设置此标志。
  • IS_POINTER_INCONTACT_WPARAM (wParam) :一个标志,指示此消息是否由联系人中的指针生成。 不会为检测范围中的指针设置此标志, (悬停) 。

lParam

包含指针的点位置。

注意

由于指针可能通过非简单区域与设备联系,因此此点位置可能是更复杂的指针区域的简化。 尽可能使用完整的指针区域信息,而不是点位置。

使用以下宏检索点的物理屏幕坐标。

返回值

如果应用程序处理此消息,它应返回零。

如果应用程序未处理此消息,则应调用 DefWindowProc

注解

窗口可以使用 WM_POINTERLEAVE 通知来更改模式,或在指针位于窗口图面上时停止向用户的任何反馈。

此通知仅发送到接收指针输入的窗口。 下表列出了发送此通知的一些情况。

操作 标志集 发送到的通知
悬停指针跨越窗口边界。 IS_POINTER_INRANGE_WPARAM 指针移动的边界外的窗口。
指针超出检测范围。 不适用 指针离开检测范围的窗口。

[!重要提示]
当窗口丢失指针捕获并收到 WM_POINTERCAPTURECHANGED 通知时,它通常不会收到任何进一步的通知。 因此,请务必不要根据均匀配对的WM_POINTERDOWN/WM_POINTERUPWM_POINTERENTER/WM_POINTERLEAVE通知做出任何假设。

如果与输入数字化器保持接触,并且指针在窗口外移动,则不会生成 WM_POINTERLEAVE 。 仅当悬停指针越过窗口边界或联系人终止时,才会生成WM_POINTERLEAVE

如果输入源自鼠标设备,则会将WM_POINTERLEAVE发布到已发布的消息队列。

要求

要求
最低受支持的客户端
Windows 8 [仅限桌面应用]
最低受支持的服务器
Windows Server 2012 [仅限桌面应用]
标头
Winuser.h (包括 Windows.h)

另请参阅

消息

参考

GET_POINTERID_WPARAM

IS_POINTER_INRANGE_WPARAM

IS_POINTER_INCONTACT_WPARAM