MFC不可点击按钮(从鼠标移动的光标逃跑)

MFC Unclickable Button (Running away from cursor on MouseMove)

本文关键字:移动 鼠标 光标 逃跑 按钮 MFC      更新时间:2023-10-16

如果光标在MFC中足够靠近按钮的中心,我将如何制作一个按钮来改变它在鼠标移动事件上的位置?

如果光标不在按钮上,则不传递WM_MOUSEMOVE(并且没有捕获,但您不希望这样)。所以你必须在父对话框中处理WM_MOUSEMOVE。如果你想让你的按钮成为一个自包含的控件,你必须在创建按钮时创建父窗口的子类。

子类化,在这种情况下,意味着:
使用GetParent()->GetWindowLong(GWL_WNDPROC)
检索并存储父窗口进程地址-你用SetWindowLong()
将它设置为你的过程-在过程中,你调用父进程的前一个窗口进程,处理WM_MOUSEMOVE后,你想要的方式。

WM_MOUSEMOVE坐标将是相对于屏幕的,但是您可能想要跟踪按钮相对于包含它的窗口的位置。使用父窗口上的ScreenToClient方法进行转换,然后您可以比较坐标,看看它是否接近。然后使用MoveWindow来移动按钮

如果您跟踪鼠标光标的位置,您可以确定光标何时接近或进入按钮窗口矩形。然后您可以使用SetWindowPos()函数来重新定位父窗口客户端区域中的按钮窗口。