现在的位置: 首页 > 综合 > 正文

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

2013年10月24日 ⁄ 综合 ⁄ 共 1552字 ⁄ 字号 评论关闭

         命中测试和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图片,不能拖动窗口,不过这也很符合常理。

 

解决代码:

 

 

抱歉!评论已关闭.