怎么正确响应WM_NCLBUTTONDOWN消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么正确响应WM_NCLBUTTONDOWN消息相关的知识,希望对你有一定的参考价值。

参考技术A 但是这样一来,连点击最小化、最大化、关闭按钮也会触发对WM_NCLBUTTONDOWN消息的消息处理函数,换言之,连关闭窗口都做不到。我试图改对WM_NCHITTEST响应,但是只要鼠标进入非客户区(甚至还没有点击)就会触发该事件,而且我也做不到网上说的根据该消息的返回值是不是HITCAPTION来确定是不是在标题栏点击,我尝试的结果是所有WM_NCHITTEST的Msg的Result全部都是0。另外,根据我在网上找到的一些博文,在WM_NCLBUTTONDOWN之后居然不是WM_NCLBUTTONUP而是WM_LBUTTONUP,这一点也很头痛。我期望的目标是:点击窗口标题栏(如果不能做到精确定位到标题栏,整个客户区也勉强可以),ShowMessage一下,但是不影响正常点击最小化。最大化和关闭按钮。------解决方案--------------------用PtInRect来判断是鼠标点击是否发生在标题栏内,然后showmessage,当然要先排除计算最小化最大化关闭按钮的rect。标题栏rect可以根据form1.Height、form1.ClinetHeight、form1.Width...计算出来。------解决方案--------------------去掉标题栏,用无边框窗体,自己模拟一个标题栏,又好看又简单,也不受系统影响。------解决方案--------------------那就重写WndFroc,在消息队列里逮住最小化最大化关闭这3个消息,然后随你发挥------解决方案--------------------//唉。。。非得贴代码void__fastcallform1.WndProc(TMessage&msg)if(msg.Msg==WM_NCLBUTTOND&&msg.WParam==2)ShowMessage(IntToStr(msg.WParam));TForm::WndProc(msg);------解决方案--------------------大冷清的夜里,版里就LZ和俺俩活人,咋还不结贴嘛。。。俺说得再详细点好了。。。//.h中声明WndProcclassTForm1:publicTForm....protected:void__fastcallWndProc(TMessage&msg);//.hpp中重写窗口过程vodi__fastcallTForm1::WndProc(TMessage&msg)//如果点击标题栏且在非系统按钮区域内if(msg.Msg==WM_NCLBUTTONDOWN&&msg.WParam==2)//点击最小化最大化和关闭按钮不会哇哈哈本回答被提问者采纳

以上是关于怎么正确响应WM_NCLBUTTONDOWN消息的主要内容,如果未能解决你的问题,请参考以下文章

窗体的PostMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);无效;

MFC:窗口响应键盘消息,边输入边显示在视图里,怎么响应消息。

快速消息应用程序,uitableview 无法正确响应键盘?

高可靠高性能的消息队列怎么实现?

致命错误:未捕获的异常“异常”,消息“不正确的响应 ID:(请求 ID:1)”

为啥我创建的MFC工具栏按钮都是灰的