MFC自定义消息

本文地址:http://blog.163.com/strive_only/blog/static/893801682010101911467765/

消息机制是windows的典型运行机制,在MFC中有很多的消息如WM_BTN**等。但是在有些情况下我们需要自定义一些消息去做一些我们需要的功能,MFC的向导不能帮助我们做到这一点,我们可以通过添加相应的代码去完成这个功能。

添加自定义消息操作如下:
1. 建立MFC工程,如基于对话框的应用程序,Test。
2. 在资源中添加要处理的消息的值,即在CTestDlg.h中添加 如下代码。 (因为很多MFC的消息是在WM_USER内的,所以这里用比WM_USER大的消息)

 #define WM_MyMessage (WM_USER+100)

3. 声明消息处理函数,在CTestDlg.h中添加代码

class CTestDlg : public CDialog

protected:
  ……
   // 生成的消息映射函数
    ……
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); // add lyw
    DECLARE_MESSAGE_MAP()
    ……

4. 添加消息映射处理,在CTestDlg.cpp中人找到如下部分添加代码

 BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
     ……
    ON_MESSAGE(WM_MyMessage, OnMyMessage)
END_MESSAGE_MAP()

 5. 实现自己的自定义消息处理

 LRESULT CTestDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    //MessageBox("recv msg success");
    //添加自己的消息处理
    ……
    return 0;    
}

6. 如果要发送一个自定义的消息,使用代码

 SendMessage( WM_MyMessage, 0, 0);

或者

 PostMessage(WM_MyMessage, 0, 0); 

如果要定义系统唯一的消息让多个应用程序去处理,不同之处如下
1. 把上面2步骤中的宏 #define WM_MyMessage (WM_USER+100) 使用   如下代替

 static UINT WM_MyMessage = RegisterWindowMessage("myMessage");

2. 上面4步骤中的代码用如下代替

 BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
     ……
    ON_REGISTERED_MESSAGE(WM_MyMessage, OnMyMessage)
END_MESSAGE_MAP()

3.测试消息时,如果要让多个应用程序都接收到这个消息,使用

 ::SendMessage(HWND_BROADCAST, WM_MyMessage, 0, 0);

   

参考文章:http://blog.csdn.net/kenkao/archive/2009/03/05/3960837.aspx

时间: 2024-11-08 19:08:38

MFC自定义消息的相关文章

mfc 对话框 传递 指针-MFC自定义消息运行第二遍时获取窗口失败

问题描述 MFC自定义消息运行第二遍时获取窗口失败 //按钮事件 void CircleDialog::OnBnClickedOk() { UpdateData(TRUE); MsgParam param; param.radius=r; param.colorref1=color1.GetColor(); param.colorref2=color2.GetColor(); CMainFrame *pMainFrm=(CMainFrame*)AfxGetMainWnd(); CView *pV

MFC自定义消息的实现方法_C 语言

一.概述: 消息机制是windows程序的典型运行机制,在MFC中有很多已经封装好了的消息,如WM_BTN**等.但是在有些特殊情况下我们需要自定义一些消息去完成一些我们所需要的功能,这时候MFC的向导不能帮助我们做到这一点.对此,我们可以通过添加相应的代码去完成这个功能. 二.实现方法: 添加自定义消息操作如下: 1. 建立MFC工程,如基于对话框的应用程序,Test. 2. 在资源中添加要处理的消息的值,即在CTestDlg.h中添加 如下代码. (因为很多MFC的消息是在WM_USER内的

mfc- MFC自定义消息中出现的问题

问题描述 MFC自定义消息中出现的问题 MFC自定义消息函数时提示can't find the definition(implementation) of this function,定义消息和映射都没问题啊 解决方案 如果确认代码是对的,特别一些细节,比如大小写.字母拼写.符号等没问题的话,重新启动下VC看看,有时候开发环境有问题. 解决方案二: 帖出定义消息和绑定消息对应函数的代码 解决方案三: 图片说明](http://img.ask.csdn.net/upload/201506/14/1

mfc-MFC消息机制之自定义消息中参数传递问题

问题描述 MFC消息机制之自定义消息中参数传递问题 MFC消息输送,能不能传递自己的参数,比如说OnDaw中给出绘图的坐标点之类的,或者消息发生的顺序? 解决方案 自定义消息可以用lparam wapram传参.系统消息要看消息怎么定义的. 解决方案二: 自定义消息的参数传递MFC 自定义消息MFC中自定义消息

mfc-【MFC静态分割窗口后,窗口通信有哪些方法???】

问题描述 [MFC静态分割窗口后,窗口通信有哪些方法???] 我自己的是从通过doc来传输数据的.发送数据获取文档指针pDoc->infoArray[0].InsertAt(0 数据"");pDoc->add=true;pDoc->UpdateAllViews(NULL);//刷新显示接受数据获取文档指针if(pDoc->add){ CString str; str = pDoc->InfoArray[0].GetAt(0);//str = 数据}那还有没

VC/MFC中如何自定义消息

定义一个自定义消息号:const UINT WM_MYMESSAGE = WM_USER + n; // 自定义消息一般大于WM_USER,然后就可以为该消息添加映射了. afx_msg LRESULT OnMyMessage ( WPARAM wParam, LPARAM lParam ); ON_MESSAGE ( WM_MYMESSAGE, OnMyMessage ) LRESULT cxx::OnMyMessage ( WPARAM wParma, LPARAM lParam ) { .

MFC对话框自定义消息映射的方法_C 语言

本文实例讲述了MFC对话框自定义消息映射的方法.分享给大家供大家参考.具体实现方法如下: 1.定义消息: 复制代码 代码如下: #define WM_MYMSG (WM_USER+100) 2.定义消息响应函数: LPESULT CSLYARDlg::OnMymsg(WPARAM wParam, LPARAM lParam) { // TODO return 0; } 3.在窗口类头文件的AFX_MSG中声明消息响应函数: // Generated message map functions /

MFC中自由使用自定义消息

消息映射.循环机制是Windows程序运行的基本方式.VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难.在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息.通常的做法是采取以下步骤: 第一步:定义消息. 推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息. #define WM_MY_MESSAGE (WM_USER+10

MFC对话框应用程序添加自定义消息

1. 定义自定义消息 [cpp] view plaincopy   /**   * \brief 消息测试   */   #define E6100_MSG_TEST          ( WM_USER + 1001 )   2. 声明自定义消息处理函数 [cpp] view plaincopy   /**   * \brief 写入数据操作完毕   */   afx_msg LRESULT OnTest( WPARAM wParam, LPARAM lParam );   3. 实现自定义消