Кнопка MFC Unclickable (убегает от курсора на MouseMove) - PullRequest
0 голосов
/ 20 апреля 2011

Как мне сделать кнопку, которая изменит свое положение на MouseMove Event, если курсор находится достаточно близко к центру кнопки в MFC?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

WM_MOUSEMOVE не доставляется кнопке, если курсор не находится над ней (и не захвачен, но вы этого не хотите). Поэтому вы должны обработать WM_MOUSEMOVE в родительском диалоге. Если вы хотите, чтобы ваша кнопка была автономным элементом управления, вы должны создать подкласс родительского окна при создании кнопки.

Подклассы в этом контексте означают:
- вы извлекаете и сохраняете адрес процедуры родительского окна с помощью GetParent () -> GetWindowLong (GWL_WNDPROC)
- вы устанавливаете это в вашей процедуре с SetWindowLong ()
- в процедуре вы вызываете предыдущую процедуру окна родителя после обработки WM_MOUSEMOVE так, как вы хотите.

1 голос
/ 20 апреля 2011

Координаты WM_MOUSEMOVE будут относительно экрана, но вы, вероятно, захотите отследить положение кнопки относительно окна, в котором она находится.Используйте метод ScreenToClient в родительском окне для преобразования, затем вы можете сравнить координаты, чтобы увидеть, близко ли это.Затем используйте MoveWindow для перемещения кнопки.

0 голосов
/ 20 апреля 2011

Если вы отслеживаете положение курсора мыши, вы можете определить, когда курсор приблизится или войдет в прямоугольник окна кнопки.Затем вы можете использовать функцию SetWindowPos () , чтобы изменить положение окна кнопки в клиентской области родительского окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...