命中测试和SendMessage WM_NCLBUTTONDOWN对鼠标消息的影响

在处理WM_LBUTTONDOWN时,使用SendMessage WM_NCLBUTTONDOWN会导致WM_LBUTTONDOWN响应阻塞,直到鼠标释放才响应。尝试使用WM_NCHITTEST进行窗口拖动会导致所有鼠标点击消息无法响应。PostMessage虽然能立即响应WM_LBUTTONDOWN,但无法响应WM_LBUTTONUP。最终解决方案是在鼠标点击非BMP区域时发送SendMessage,允许窗口拖动,而在点击BMP区域时不发送,以保持正常响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         命中测试和SendMessage  WM_NCLBUTTONDOWN对鼠标消息的影响

 

 

在WM_LBUTTONDOWN里面处理
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
或者
响应NCHITTEST消息,命中测试。

将会导致WM_LBUTTONDOWN响应阻塞,也就是按下鼠标,不会收到WM_LBUTTONDOWN消息,而要等到鼠标放开,才有WM_LBUTTONDOWN和WM_LBUTTONUP进行响应。

 

代码:

 

到这里很清楚了,就是由于我发送了SendMessage NCLBUTTONDOWN消息,SendMessage消息不能返回,导致WM_LBUTTTONDOWN响应不能返回,当我鼠标松开弹起的时候,系统接管结束,SendMessage返回,我的WM_LBUTTONDOWN返回,表面上看是响应延时。实际是SendMessage阻塞了。

有人提出,我处理拖动应该采用WM_NCHITTEST,经过测试,发现一旦采用对WM_NCHITTEST进行处理拖动,窗口将无法响应任何鼠标点击消息。应该是所有鼠标消息都被系统的拖动接管了。所有这个方法是不行的。

还有人提出,我应该将SendMessage改为PostMessage消息,测试结果就是,能够马上响应WM_LBUTTONDOWN,但是却基本不能响应WM_LBUTTONUP,原因猜测也是在执行拖动的时候,不能响应消息,消息被系统接管。

还有人提出,我应该在我绘制BMP之后,再在WM_LBUTTONDOWN里面调用SendMessage,此时结果,能够马上响应WM_LBUTTONDOWN,但是却基本不能响应WM_LBUTTONUP,原因猜测也是在执行拖动的时候,不能响应消息,消息被系统接管。

现在我的处理很简单,就是如果鼠标点击的不是我的BMP区域,我就SendMessage,让他拖动。反之,如果点击的是BMP区域,我就不发送SendMessage,这样就完全正常了。缺陷就是鼠标点击BMP图片,不能拖动窗口,不过这也很符合常理。

 

解决代码:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值