为标题栏上的问号按钮添加点击消息响应函数(MFC)

       这是在MFC中为标题栏的问号按钮添加消息响应的一种方法。其所达到的目的是当左键点击问号按钮时,弹出帮助文档。找到下面两篇文章,作为借鉴。


(1)  转自:http://blog.csdn.net/amdxp20085/article/details/2507722

       这两天由于项目需要,调查了一个带问号按钮的对话框,花了一天半时间,原因是开始走错了路。大家一般知道的是点击了那个问号按钮后,鼠标会带一个问号,然后单击对话框上的某一个控件,就会显示相关的帮助文字信息。而我们的小日本客户偏偏很怪,要求点击问号按钮后弹出帮助文档,那么只有想办法了。 关键是要找到点击问号按钮产生的消息。为了这个问题,我调查错了方向,结果多花了一天时间。我先是查点问号按钮的一些功能,结果往WM_HELP和WM_HELPINFO方向上去查了,而那个是为了显示带问号的鼠标点击后的帮助文字的,结果没查出结果。后来我找到了一个消息响应函数:OnNcLButtonDown(UINT nHitTest, CPoint point),这个是在对话框标题栏按下鼠标左键的响应函数。区别于OnLButtonDown,OnLButtonDown是作用在对话框的客户区的,也就是标题栏下面的区域。而函数OnNcLButtonDown的参数nHitTest正是带表点击的是标题栏上的那个部位。经调查发现,问号按钮对应的nHitTest是HTHELP,这样就可以判断点击的是标题栏的问号按钮了。那么问题也就基本解决。 但是还有一个问题: 我们一般希望,在鼠标点击释放时的响应,而这里用的是down,也就是押下时。但是我换了释放的响应函数OnNcLButtonUp时,却捕捉不到消息了。而有趣的是如果双击却会进入OnNcLButtonUp函数。这是为什么?在csdn上看到有位叫 silver(Bai)的网友这样解释的:“鼠标点在标题栏上时只会发出WM_NCLBUTTONDOWN而不会有WM_NCLBUTTONUP,如果你是想响应标题栏上的鼠标左键消息,处理WM_NCLBUTTONDOWN就可以啦 不过需要注意的是当鼠标点在非标题栏的非客户区部分的时候,会先后有WM_NCLBUTTONDOWN和WM_NCLBUTTONUP消息发出。”如果这个说法是对的话,我的问题就算有答案了吧,呵呵。


(2) 转自:http://blog.csdn.net/zyrr159487/article/details/7190352

       单击问号,直接弹出自定义的帮助对话框
       1.修改标题栏风格
        ModifyStyleEx(0, WS_EX_CONTEXTHELP);  
       2.响应函数
       void CBGridDotDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)  
       {   
           //单击的是问号  
           if (nHitTest == HTHELP)  
           {  
               CBParamHelpDlg dlg;  
               dlg.DoModal();  
           }    
       }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值