您的位置:首页 > 其它

关于采用默认方式处理WM_NCLBUTTONDOWN消息而“无法”产生WM_NCLBUTTONUP消息的问题

2014-07-13 20:56 791 查看
问题产生:打算自己绘制标题栏,去掉有了系统菜单,就剩下了一个光秃秃的标题栏,在完成绘制关闭按钮后,作了以下事情:

1:响应WM_NCBUTTONDOWN消息

2:响应WM_NCBUTTONUP消息。

由于我用的Win32,没用MFC,所以在每处理完消息后就直接返回0;

这看似正常,既能够响应WM_NCBUTTONDOWN消息,也能够响应WM_NCBUTTONUP消息,但是问题出现了,

那就是我们不能通过标题栏移动窗口了,于是在响应WM_NCBUTTONDOWN的添加上了默认处理该消息的函数DefWindowProc,

这样就可以移动窗口,但是却不能产生WM_NCBUTTONUP消息,除非鼠标双击。

为了解决采用默认方式处理WM_NCBUTTONDOWN消息而不能产生WM_NCBUTTONUP消息,参考了别人的意见,

就是在对WM_SYSCOMMAND消息进行处理,代码如下:

if (wParam & 0xfff0 == SC_MOVE)
PostMessage(hWnd,WM_NCLBUTTONUP, HTCAPTION, lParam);   // 发送WM_NCLBUTTONUP消息
return DefWindowProc(hWnd, uMsg, wParam, lParam);//采用默认处理


就是发送一个WM_NCBUTTONUP消息,但是此时对WM_BUTTONDOWN消息有默认处理的代码,如果对该消息最后不进行默认处理,也不能得到有效的效果。

但是,尽管这样处理,还是有一定的问题,例如,将窗口不停的移动(移动----》释放-----》移动........如此下去),后面的其他窗口会出现或不显示的状态。

所以,解决该问题的方法可以在WM_LBUTTONDOWN消息中最后采用默认处理;也可以不用,但是必须还要处理由此引出的一系列问题

如:要解决移动窗口问题,并且缺少很多默认处理的操作,这样在以后也会带来很多不变的操作。

最后,对于WM_RBUTTONDOWN与WM_RBUTTONUP消息也有类似情况,其原因应该都是默认处理所造成的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: