关于采用默认方式处理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消息进行处理,代码如下:
就是发送一个WM_NCBUTTONUP消息,但是此时对WM_BUTTONDOWN消息有默认处理的代码,如果对该消息最后不进行默认处理,也不能得到有效的效果。
但是,尽管这样处理,还是有一定的问题,例如,将窗口不停的移动(移动----》释放-----》移动........如此下去),后面的其他窗口会出现或不显示的状态。
所以,解决该问题的方法可以在WM_LBUTTONDOWN消息中最后采用默认处理;也可以不用,但是必须还要处理由此引出的一系列问题
如:要解决移动窗口问题,并且缺少很多默认处理的操作,这样在以后也会带来很多不变的操作。
最后,对于WM_RBUTTONDOWN与WM_RBUTTONUP消息也有类似情况,其原因应该都是默认处理所造成的。
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消息也有类似情况,其原因应该都是默认处理所造成的。
相关文章推荐
- 关于WM_NCLBUTTONUP消息
- 自定义View想使用Scroller实现滑动效果,但是事件接收出现问题,只收到ACTION_DOWN,而无法收到ACTION_MOVE, ACTION_UP等消息的处理
- 关于CStatic类不能重载ON_WM_LBUTTONDOWN消息的问题
- C# 使用WM_NCLBUTTONDOWN消息实现任意位置移动窗体
- 关于WM_NCLBUTTONUP
- 关于在标题栏不触发WM_NCLBUTTONUP事件的替代方法(C#)
- WM_NCLBUTTONDOWN+HTCAPTION消息移动一个窗口
- OnContextMenu 和OnRButtonDown问题(WM_CONTEXMENU消息与WM_RBUTTONDOWN消息)
- 如何扑捉到WM_NCLBUTTONUP(OnNcLButtonUp)消息
- WM_NCLBUTTONDOWN+HTCAPTION消息移动一个窗口
- 关于非模式对话框(Modeless Dialog)无法响应WM_KILLFOCUS消息问题
- MFC一个解决自己发送WM_NCLBUTTONDOWN消息后收不到WM_ONLBUTTONUP的方法
- bug分享 - 收不到WM_NCLBUTTONUP消息
- 关于OnNcLButtonUp不能响应消息的问题
- 关于页面中回车键默认触发某个控件按钮事件的问题(DefaultButton)
- » 转载请注明来源:贰号楼肆层 » 《关于Maven无法正确处理javac中文警告信息的问题》
- Button中MouseLeftButtonDown和MouseLeftButtonUp事件无法触发的解决方案
- Button中 MouseLeftButtonDown和MouseLeftButtonUp 事件无法触发的解决方案 (转)
- 关于WM_NOTIFY与消息反射————耗费我两天时间才解决的问题
- HOOK专题 (关于WIN的消息截获及提前处理问题的基本解决方案)