问题产生:打算自己绘制标题栏,去掉有了系统菜单,就剩下了一个光秃秃的标题栏,在完成绘制关闭按钮后,作了以下事情:
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_LBUTTONDOWN消息中最后采用默认处理;也可以不用,但是必须还要处理由此引出的一系列问题
如:要解决移动窗口问题,并且缺少很多默认处理的操作,这样在以后也会带来很多不变的操作。
最后,对于WM_RBUTTONDOWN与WM_RBUTTONUP消息也有类似情况,其原因应该都是默认处理所造成的。