如果光标足够接近MFC中按钮的中心,我如何制作一个可以改变它在MouseMove事件上的位置的按钮?
答案 0 :(得分:2)
如果光标未在按钮上,则不会将WM_MOUSEMOVE传递给按钮(并且未捕获,但您不希望这样)。因此,您必须在父对话框中处理WM_MOUSEMOVE。如果希望按钮是一个自包含控件,则必须在创建按钮时将父窗口子类化。
在这种情况下,子类化意味着:
- 使用GetParent() - > GetWindowLong(GWL_WNDPROC)检索并存储父窗口的proc地址
- 使用SetWindowLong()将其设置为您的过程
- 在程序中,在按照你想要的方式处理WM_MOUSEMOVE之后,你调用父的前一个窗口proc。
答案 1 :(得分:1)
WM_MOUSEMOVE坐标将相对于屏幕,但您可能希望跟踪相对于包含它的窗口的按钮位置。使用父窗口上的ScreenToClient方法进行转换,然后您可以比较坐标以查看它是否接近。然后使用MoveWindow移动按钮。
答案 2 :(得分:0)
如果您跟踪鼠标光标位置,您可以确定光标何时接近或进入按钮窗口rect。然后,您可以使用SetWindowPos()函数在父窗口客户区中重新定位按钮窗口。