MFC自定义消息的实现方法

所属分类: 软件编程 / C 语言 阅读数: 48
收藏 0 赞 0 分享

一、概述:

消息机制是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);
更多精彩内容其他人还在看

C++广播通信实例

这篇文章主要介绍了C++实现广播通信的方法,实例讲述了C++ socket广播通信的原理与实现方法,需要的朋友可以参考下
收藏 0 赞 0 分享

C++计算ICMP头的校验和实例

这篇文章主要介绍了C++计算ICMP头的校验和的方法,代码简单实用,对于校验ICMP报文来说有不错的实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C++设置超时时间的简单实现方法

这篇文章主要介绍了C++设置超时时间的简单实现方法,涉及系统函数setsockopt对套接口的操作,具有一定的实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C++实现ping程序实例

这篇文章主要介绍了C++实现ping程序实例,涉及C++对于ICMP数据包的发送与回显处理,具有一定的实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C++之boost::array的用法

这篇文章主要介绍了C++之boost::array的用法,以实例的形式简单讲述了静态数组的容器boost::array的使用技巧,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C++之Boost::array用法简介

这篇文章主要介绍了C++之Boost::array用法简介,较为详细的分析了Boost::array中的常见用法,并用实例的形式予以总结归纳,需要的朋友可以参考下
收藏 0 赞 0 分享

VC文件目录常见操作实例汇总

这篇文章主要介绍了VC文件目录常见操作实例汇总,总结了VC针对文件目录的各种常用操作,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

VC打印word,excel文本文件的方法

这篇文章主要介绍了VC打印word,excel文本文件的方法,是VC操作文本文件中非常实用的技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

VC++获得当前进程运行目录的方法

这篇文章主要介绍了VC++获得当前进程运行目录的方法,可通过系统函数实现该功能,是非常实用的技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

VC中SendMessage和PostMessage的区别

这篇文章主要介绍了VC中SendMessage和PostMessage的区别,较为全面的分析了SendMessage和PostMessage运行原理及用法上的不同之处,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多