MFC不可点击按钮(从鼠标移动的光标逃跑)
MFC Unclickable Button (Running away from cursor on MouseMove)
如果光标在MFC中足够靠近按钮的中心,我将如何制作一个按钮来改变它在鼠标移动事件上的位置?
如果光标不在按钮上,则不传递WM_MOUSEMOVE(并且没有捕获,但您不希望这样)。所以你必须在父对话框中处理WM_MOUSEMOVE。如果你想让你的按钮成为一个自包含的控件,你必须在创建按钮时创建父窗口的子类。
子类化,在这种情况下,意味着:
使用GetParent()->GetWindowLong(GWL_WNDPROC)
检索并存储父窗口进程地址-你用SetWindowLong()
将它设置为你的过程-在过程中,你调用父进程的前一个窗口进程,处理WM_MOUSEMOVE后,你想要的方式。
WM_MOUSEMOVE坐标将是相对于屏幕的,但是您可能想要跟踪按钮相对于包含它的窗口的位置。使用父窗口上的ScreenToClient方法进行转换,然后您可以比较坐标,看看它是否接近。然后使用MoveWindow来移动按钮
如果您跟踪鼠标光标的位置,您可以确定光标何时接近或进入按钮窗口矩形。然后您可以使用SetWindowPos()函数来重新定位父窗口客户端区域中的按钮窗口。
相关文章:
- SendInput()鼠标移动计算
- Win32 发送输入鼠标移动滞后并冻结
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件
- 使用具有设置延迟C++的mouse_event平滑鼠标移动
- Qt将鼠标移动事件转移到新窗口
- Wince 6.0如何在操作系统靴子后移动鼠标指针
- 鼠标单击背景窗口,而无需移动鼠标C
- 如何使用mouseevent在windows登录屏幕中移动鼠标光标
- 移动鼠标会导致事件不更新
- 按下按键或移动鼠标时,游戏速度会减慢
- 如何从用户代码中移动鼠标光标
- 如何在后台窗口中移动鼠标
- 为什么我的SDL 2应用程序中的帧速率减半,除非我在某个位置移动鼠标
- SDL 在没有焦点时不会停止移动鼠标 - SDL C++
- 只有移动鼠标后,ShowCursor才会生效
- CPP Win32移动鼠标,Wont移动到我指定的位置
- 如何在opencv中使用对象跟踪的概念移动鼠标
- 移动鼠标时抖动
- 如何知道如果我已经移动鼠标到左边或右边
- 移动鼠标位置,然后回到开始位置