如何检查鼠标是否在控件上

时间:2010-12-21 00:27:21

标签: c++ controls winapi ismouseover

如何检查鼠标是否超过某个HWND?我已经尝试使用WM_MOUSELEAVE和WM_MOUSEMOVE消息来跟踪,但是如果你单击一个按钮并将鼠标拖出按钮,它就不会收到WM_MOUSELEAVE,直到鼠标被释放为止,这太晚了,因为:

单击按钮时,仅在以下情况下发送WM_COMMAND消息:
1.鼠标最初被压在按钮上 2.鼠标悬停在按钮上 3.鼠标通过按钮

释放

我需要复制此功能。

2 个答案:

答案 0 :(得分:3)

要复制此功能,只需调用SetCapture()即可将鼠标消息发送到您的窗口,即使鼠标离开也是如此。您可以在移动时读取当前鼠标位置并确定它是否仍然在您的窗口/按钮上(我仍然不能100%确定您在做什么)。并且,当释放鼠标按钮时,您可以调用ReleaseCapture()来恢复发送鼠标消息的位置。

编辑:哦,您可以使用Windows API函数WindowFromPoint()来确定鼠标所在的窗口。

答案 1 :(得分:2)

这是Windows内置的,它被称为'鼠标捕获',SetCapture(hWnd)。即使鼠标移出窗口,它也可以确保您收到鼠标消息。您可以在WM_LBUTTONDOWN消息通知上调用它。