Как проверить, находится ли мышь над элементом управления

StackOverflow https://stackoverflow.com/questions/4495275

Вопрос

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

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

Мне нужно воспроизвести эту функциональность.

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top