Как проверить, находится ли мышь над элементом управления - PullRequest
3 голосов
/ 21 декабря 2010

Как можно проверить, находится ли мышь над определенным HWND?Я пытался использовать сообщения WM_MOUSELEAVE и WM_MOUSEMOVE для отслеживания, но если вы нажмете кнопку и перетащите мышь из кнопки, он не получит WM_MOUSELEAVE до тех пор, пока мышь не будет отпущена, что слишком поздно, потому что:

При нажатии кнопки сообщение WM_COMMAND отправляется только в том случае, если:
1. Мышь изначально была нажата над кнопкой
2. Мышь находится над кнопкой
3. Мышьотпущен через кнопку

Мне нужно повторить эту функцию.

Ответы [ 2 ]

3 голосов
/ 21 декабря 2010

Чтобы дублировать эту функцию, просто наберите SetCapture(), чтобы сообщения мыши отправлялись в ваше окно, даже если мышь покидает его. Вы можете прочитать текущую позицию мыши по мере ее перемещения и определить, находится ли она все еще над вашим окном / кнопкой (я все еще не уверен на 100%, что вы делаете). И когда кнопка мыши отпущена, вы можете позвонить ReleaseCapture(), чтобы восстановить, куда отправляются сообщения мыши.

РЕДАКТИРОВАТЬ: О, и вы можете использовать функцию Windows API WindowFromPoint(), чтобы определить, над каким окном находится мышь.

2 голосов
/ 21 декабря 2010

Это встроенный в Windows, он называется «захват мыши», SetCapture (hWnd). Это гарантирует, что вы получаете сообщения мыши, даже если мышь вышла за пределы окна. Вы вызываете это в уведомлении о сообщении WM_LBUTTONDOWN.

...