按钮 左键 按下 弹起时候 响应 消息

最近在做按钮 发现 按钮本身之后 单击双击事件

没有按下弹起事件,搜了一下说 可以重载 cbutton

或者使用 消息 

我选择使用消息

只要在代码中插入如下函数 即可":

 

如果对于同一个按钮只响应 buttondown或者buttonup setfocus写不写 都会有

按钮下下去的虚线 显示 按下的状态 但是 如果同一个ID button down 和up 都响应就会没有

虚线显示 就像一个 死按钮,这时候要加入 setfocus 获得焦点 显示 虚线 会好看很多

另外 对于按下时候 如果没有返回值 就会发现 无论点在对话框的如何地方 都会响应下边的函数

儿不仅仅是按钮处,所以要有返回值,

 

 

或者使用下边代码

 

这里开始没有加入setfocus 使得按钮是

在Visual Studio 2013的MFC(Microsoft Foundation Classes)环境中,为了实现鼠标左键按下按钮时能够触发移动事件,然后松开按钮时停止移动,你可以按照以下步骤操作: 1. **创建控件**:首先,你需要创建一个`CButton`对象或者它的派生类,如`CAnimateCtrl`,后者更适合处理动画效果。 ```cpp CAnimateCtrl m_AnimateButton; ``` 2. **连接信号槽**:在窗口类的`OnInitDialog`等合适的地方,将按钮的`BN_CLICKED`信号链接到一个成员函数,例如`OnLeftButtonDown`,在这个函数里处理移动开始。 ```cpp afx_msg void OnLeftButtonDown(UINT nFlags, CPoint point); ``` 3. **处理移动**:在`OnLeftButtonDown`中,开始监听鼠标的移动事件,比如通过`DockControlToWindow`函数将按钮控制权交给另一个窗口,用户可以在该窗口区域内移动。 ```cpp m_AnimateButton.SetCapture(); m_AnimateButton.MoveWindow(/* 新位置 */); ``` 4. **移动更新**:在消息循环中添加`WM_MOUSEMOVE`处理函数,用于实时更新按钮的位置,并在接收到`WM_LBUTTONUP`(鼠标左键抬起)消息时结束移动。 ```cpp afx_msg void OnMouseMove(UINT nFlags, CPoint point); void OnLeftButtonUp(UINT nFlags, CPoint point) { if (m_AnimateButton.HasCapture()) { m_AnimateButton.ReleaseCapture(); } } ``` 5. **动画暂停**:当你想要在按钮弹起时停止移动,可以设置`Animate()`函数的参数,例如,当`m_AnimateButton.IsPlaying()`返回`true`时停止播放动画。 ```cpp if (m_AnimateButton.IsPlaying()) { m_AnimateButton.Stop(); } ``` 6. **清理资源**:确保在适当的时候释放捕捉的鼠标控制权以及清除其他相关的定时器或线程,以防止内存泄漏。 记得在完成后加入适当的错误检查和边界条件,以保证程序的健壮性。这是基础的实现框架,具体细节可能需要根据实际需求调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值