MFC 自定义消息

 一、知识准备

消息映射就是把消息标识和处理函数联系起来。

 建立消息映射需要使用消息映射宏。

 不同类型的消息映射,需要使用不同类型的消息映射宏。

    消息类型                                  宏格式                                       宏参数

标准Windows消息                ON_WM_XXX                                     无参数 

命令消息                                  ON_COMMAND                                 命令ID,处理函数名

更新命令消息                          ON_UPDATE_COMMAND_UI        命令ID,处理函数名

控件通知消息                          ON_XXX                                               控件ID,处理函数名

用户自定义消息                      ON_MESSAGE                                   自定义消息ID,处理函数名

已注册的Windows消息         ON_REGISTERED_MASSAGE       消息ID,处理函数名


二、案例简介     

工程名:xx    基于对话框     

自定义消息 WM_MYMSG    及其消息响应函数  MsgFun()。

 在对话框中添加 一个按钮: IDC_START    Caption:开始    及其BN_CLICKED 消息响应函数   OnStart()

每点击一次按钮,按钮上的文字会变成“点击x次”,当点击次数是5的倍数时,按钮的处理函数 OnStart() 会发出一条自定义消息 WM_MYMSG 

主窗口收到这条自定义消息后,自定义消息的处理函数会弹出一个对话框。


三、添加代码

1、在CxxDlg.h 文件的开始      定义消息    #define  WM_MYMSG  WM_USER+1

2、在CxxDlg.h 文件中,CxxDlg 定义的里面,声明自定义消息的处理函数原型

       CxxDlg:public CDialog
      {
       public:
         LRESULT MsgFun(WPRAR wParam,LPARAM lParam);
         .....
      }

3、在CxxDlg.cpp文件中,进行消息映射

      BEGIN_MESSAGE_MAP(CMy233Dlg, CDialog)
//{{AFX_MSG_MAP(CMy233Dlg)

......
ON_MESSAGE(WM_MESG,MesgFun)
//}}AFX_MSG_MAP

     END_MESSAGE_MAP()

4、在CxxDlg.cpp文件中,编写响应函数的实现

       LRESULT CxxDlg::MesgFun(WPARAM wParam,LPARAM lParam)
       {
       CString str;
       str.Format("你已经点击了%d次!",num);
       MessageBox(str,"",MB_OK);       
       return 0;
       }

       这个处理函数收到自定义消息后,只做了一件事,弹出一个对话框。

5、这个自定义消息从哪里发出?怎么发出呢?

      void CxxDlg::OnStart()                   //  从按钮的BN_CLICKED响应函数里发出
     {
        // TODO: Add your control notification handler code here

       CString str;
       str.Format("%s%d%s","点击",num+1,"次");                         //  num 是CxxDlg类的整型成员变量
               GetDlgItem(IDC_START)->SetWindowText(str);              //   变换按钮的显示文本
       num++;
        if (num%5==0)
        {
                 SendMessage(WM_MESG,0,0);       //  通过函数SendMessage()发出,第一个参数WM_MESG 就是我们自定义的消息。
        }
      }





















    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值