用SetCapture捕获鼠标消息

初次接触SetCapture一直不知道这个函数到底有什么作用,后来反复看了几遍书后才稍微理出了一点儿头绪。
我用TRACE宏对SetCapture、GetCapture和ReleaseCapture这三个函数作了测试:
void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
    ::SetCapture(this->GetSafeHwnd());
}
void CMainWindow::OnLButtonUp(UINT nFlags, CPoint point)
{
   
    if (GetCapture() == this)
    {
        TRACE(_T("123/n"));
    }
    else
    {
        TRACE(_T("456/n"));
    }
    ::ReleaseCapture();
}
写这段代码,我本意是想当在窗口中点击并释放鼠标时,在调试窗口中输出“123”;在窗口中点击鼠标但在窗口外释放鼠标时,输出“456”,但我完全错了。由于我在OnLButtonDown消息中已经捕获了鼠标,而我的TRACE输出语句又是在::ReleaseCapture函数执行之前,所以不管在什么情形下释放鼠标左键,永远都只会输出“123”。而将::ReleaseCapture函数放在OnLButtonUp消息的最前面执行,又会永远只输出“456”。
于是我又作了一个测试,交OnLButtonDown消息中的SetCapture和OnLButtonUp消息中的ReleaseCapture注释掉,却又发现TRACE永远都只输出“456”,原来是在没用使用SetCapture捕捉鼠标的情况下,GetCapture永远都只会返回NULL。
由此得出结论,SetCapture和ReleaseCapture必须成对出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值