vc_添加自定义消息及消息处理函数分5步及详解

vc_添加自定义消息及消息处理函数分5步及详解

ID:47551629

大小:20.37 KB

页数:6页

时间:2019-09-19

vc_添加自定义消息及消息处理函数分5步及详解_第1页
vc_添加自定义消息及消息处理函数分5步及详解_第2页
vc_添加自定义消息及消息处理函数分5步及详解_第3页
vc_添加自定义消息及消息处理函数分5步及详解_第4页
vc_添加自定义消息及消息处理函数分5步及详解_第5页
资源描述:

《vc_添加自定义消息及消息处理函数分5步及详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1.在要添加消息的类头文件中定义宏 #defineWM_xxxWM_USER+n(n>=0);2.在类的声明中添加消息处理函数的声明 afx_msgvoidxxxx(WPARAMwParam,LPARAMlParam);3.在类的实现文件中消息映射部分添加消息映射  ON_MESSAGE(WM_xxx,xxxx);4.自己编写消息处理函数。5.在要发送此消息的函数中调用函数BOOLPostMessage( HWNDhWnd,     //handleofdestinationwindow UINTMsg,      //messagetopost W

2、PARAMwParam, //firstmessageparameter LPARAMlParam  //secondmessageparameter);把消息送到消息队列中。最近在用VC2008做开发,后来由于要用到消息的发送,而且需要自定义消息,在网上查找了很多例子,根据他们所说的,虽然大致都差不多,但是基本上没有一个能完全做出来的。要知道VC编程有一个小地方出错,都可能是个让你头晕脑胀的事情。经过我后来不但探索,经过改进之后,一点错误都没有,现在贴出来供大家参考。      1.先来个基本知识介绍SendMessage的基本结构如下:SendM

3、essage(    HWNDhWnd,  //消息传递的目标窗口或线程的句柄。    UINTMsg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)    WPARAMwParam,//参数1(WPARAM其实是与UINT是同种类型的,  //在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。    LPARAMlParam);//参数2其中一些参数的由来如下://typedefunsignedintUINT;//typedefUINTWPARAM;//typedefLONGLPARAM;//typedef

4、LONGLRESULT;2.  SendMessage用法实例    例如可以用以下语句:voidCTScrollWinView::OnLButtonDblClk(UINTnFlags,CPointpoint)       {            //TODO:在此添加消息处理程序代码和/或调用默认值     ::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CHILDFRAMEDBCLK,0,0);     CScrollView::OnLButtonDblClk(nFlags,point);       }这是我

5、用VC2008下建立的一个多文档选项卡式工程里面的一段代码,是为了实现在子窗口双击后发送一个不带参数的消息(其ID为WM_USER+1)给主窗口,如上为部分代码,其中WM_CHILDFRAMEDBCLK是自定义的消息ID,AfxGetMainWnd()->m_hWnd是获得主窗口(这里不能使用GetParent()->m_hWnd或者GetParentFrame()->m_hWnd,因为这是获得父窗口,但父窗口不一定是主窗口,一定要注意,不然消息就会发错导致接收不到,我这里卡了半天,后来在QQ群里一位大侠告诉我的,在此再感谢一下那位大侠);3.在接收

6、消息的窗体以及线程所在的头文件里定义:#defineWM_CHILDFRAMEDBCLK WM_USER+1   //dosomething4.然后接下来定义一个消息需要映射的函数,如下:afx_msgLRESULTOnChlidFrameDBClick(WPARAMwParam,LPARAMlParam);注意格式必须是:两个参数必不可少,返回类型一定为LRESULT,网上很多文章都忽略了这两点,这也是网上文章普遍错误的地方。5.添加消息函数映射    ON_MESSAGE(WM_CHILDFRAMEDBCLK,OnChlidFrameDBClic

7、k)    注意这里必须是ON_MESSAGE,不能使用ON_COMMAND,前者主要针对用户自定义消息,后者针对WM_COMMAND命令,比如菜单、工具栏等.6.实现消息函数:我们在接收窗体里定义一个这样的事情(过程),LRESULTCMainFrame::OnChlidFrameDBClick(WPARAMwParam,LPARAMlParam)      {            CancelFullScreenWin();  //这里调用了一个使子窗口全屏的自写函数,我就不贴出来了,以后专题将的时候会提到      return0;     

8、 } 7.下面是部分代码,要想搞清楚自定义消息发送只看这部分代码就足够了在MainFrm.h头文件里定义了消

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。