win32学习之路(六)

今天来讲一下SetCapture和ReleaseCapture函数。
这是我写button的三种状态时遇到的问题。我在创建button的时候,单独写了一个回调函数,用来专门对button的操作。
回调函数为m_OldProc = (WNDPROC)SetWindowLong(m_button, GWL_WNDPROC, (LONG)ButtonProc);
当我写button的WM_MOUSEHOVER、WM_MOUSEMOVE、WM_MOUSELEAVE、WM_LBUTTONDOWN(分别时鼠标的悬停、鼠标的移动、鼠标的离开,鼠标左键按下)时,button正常一个颜色(假设为黄色),鼠标悬停一个颜色(假设为绿色)、鼠标按下一个颜色(假设为红色),三种状态,当我成功运行时发现,鼠标按下不松开,当鼠标脱离button这个窗口时,button的颜色会变为正常的颜色,实际上我想要的结果并不是这样,正常的现象应该是:假设按下去的颜色为红色 ,按下去不松开,鼠标离开button的窗口,button保持红色。
我在WM_LBUTTONDOWN时加入SetCapture();
在WM_LBUTTONUP时加入ReleaseCapture()就能成功运行出来我想要的结果。
SetCapture: 该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。
函数原型:HWND SetCapture(HWND hwnd);
ReleaseCapture:该函数功能是该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值