转载来自

https://www.cnblogs.com/skywatcher/p/3506158.html

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

MFC添加自定义消息

由于MFC中无法通过类向导来自定义消息,所以需要手动添加,主要过程如下:

本文基于vs2008下通过线程实现数据实时更新的对话框运用程序

1. 定义消息(Resource.h文件中):

由于很多新控件也会用到WM_USER消息,所以定义WM_USER+100或更高,避免冲突

#define   WM_UPDATEDATA    (WM_USER + 100)

2015-3-18 更新

1. 定义消息( stdafx.h文件中):

由于很多新控件也会用到WM_USER消息,所以定义WM_USER+100或更高,避免冲突,消息定义到stdafx.h文件中,Resource.h文件由系统维护,经常出现自定义的消息丢失。

#define   WM_UPDATEDATA    (WM_USER + 100)

2. 声明消息响应函数:

放在消息映射部分,即DECLARE_MESSAGE_MAP()之前

// 实现
protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);DECLARE_MESSAGE_MAP()

3. 实现消息响应函数:

由于在vs2008中未定义ON_MESSAGE_VOID,所以定义的消息响应函数必须有返回值,即LRESULT;而消息参数是WPARAM wParam和LPARAM lParam

LRESULT CEditTestDlg::OnUpdateData(WPARAM wParam, LPARAM lParam)
{UpdateData(wParam);return 0;
}

4. 将消息映射到消息处理函数:

放在AFX_MSG_MAP之前,把WM_UPDATEDATA消息映射到消息响应函数OnUpdateData

BEGIN_MESSAGE_MAP(CEditTestDlg, CDialog)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON1, &CEditTestDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

5. 发送自定义消息:

以下函数是在一个新的线程中调用的,PostMessage,SendMessage,SendMessageTimeout均可用,推荐使用SendMessageTimeout函数

static UINT SendMsgThread(LPVOID lpParam)
{CEditTestDlg *dlg = (CEditTestDlg*) lpParam;int i = 0;while (i < 100){Sleep(20);i += 1;dlg->m_value2.Format(_T("%d"), i);//PostMessage(dlg->m_hWnd,WM_UPDATEDATA,FALSE,NULL);//SendMessage(dlg->m_hWnd,WM_UPDATEDATA,FALSE,NULL);SendMessageTimeout(dlg->m_hWnd, WM_UPDATEDATA, FALSE,NULL, SMTO_BLOCK, 1000, NULL);}return 0;
}

如果用户需要一个定义整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage定义消息:
在Resource.h中将代码

#define   WM_UPDATEDATA    (WM_USER + 100)

修改为

static UINT WM_UPDATEDATA=RegisterWindowMessage(_T("User"));

并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
注:如果仍然使用ON_MESSAGE宏指令,compile可以通过,但是无法响应消息。

相关内容可查看:线程调用UpdateData函数出错

MFC开发IM-第二十篇、MFC添加自定义消息相关推荐

  1. LinuxGUI自动化测试框架搭建(二十一)-截止第二十篇,如果出现以下错误,请修改代码+截止目前的全局配置文件config.py内容

    (二十一)-截止第二十篇,如果出现以下错误,请修改代码 1 错误类型 2 原因分析 3 解决方法 4 修改common/screenShot.py 5 修改config/config.py 1 错误类 ...

  2. MFC开发IM-第二十六篇、vs2008添加库文件

    [Setting]VS2008项目怎样添加"依赖(lib)"."库目录(Libs)"."包含目录(include)"和"引用动态链 ...

  3. MFC开发IM-第二十四篇、使用 acl 库针对 C++ 对象进行序列化及反序列编程

    在开发网络应用程序时,各个模块之间的数据通信可谓是家常便饭,为了应对这些数据通信时数据交换的要求,程序员发明了各种数据格式:采用二进制数据结构(早期 C 程序员).采用 XML.采用SOAP(坑人的设 ...

  4. MFC开发IM-第二十八篇、acl 的编译与使用

    转载来自::: http://zsxxsz.iteye.com/blog/1506554 ------------------------------------------- acl 库的功能参见文 ...

  5. MFC开发IM-第二十五篇、往MFC编辑框最后面追加文本

    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT); int nLength = pEdit->GetWindowTextLength(); //选定当前文本 ...

  6. MFC开发IM-第二十二篇、C++中 Unicode 与 UTF-8 编码互转

    1.简述 最近在发送网络请求时遇到了中文字符乱码的问题,在代码中调试字符正常,用抓包工具抓的包中文字符显示正常,就是发送到服务器就显示乱码了,那就要将客户端和服务器设置统一的编码(UTF-8),而我们 ...

  7. MFC开发IM-第二十七篇、如何引入acl,解决Json解析问题

    1.下载acl库,下载地址:::: https://download.csdn.net/download/golddaniu/10302417 2.引入库文件 #pragma comment(lib, ...

  8. MFC开发IM-第二十三篇、C++中 UTF-8转成Unicode

    实现代码 //UTF-8转成Unicode int length; wchar_t* wCharUnicode = L"中国你好"; length = wcslen(wCharUn ...

  9. MFC开发IM-第二十一篇、Unicode转成Utf8

    //UnicodeToUtf8 Unicode转成Utf8 char*  mainDlg::UnicodeToUtf8(const wchar_t* unicode) {     int len;   ...

最新文章

  1. ItClust:利用迁移学习解决scRNA-seq中的细胞聚类问题
  2. 3000+ NLP资源一网打尽,只需用这个分类检索网站 | 免费
  3. 课程分类管理-添加课程分类
  4. python:栈的理解与应用,让你快速入门Python
  5. Acey.ExcelX实例演练(1)—从GridView中导出Excel报表
  6. 从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理
  7. java每隔多长时间执行一次_crontab中如何实现每隔多少天执行一次脚本
  8. bzoj 3028 食物——生成函数
  9. am335x sd卡启动系统参数设置
  10. 20本适合C/C++程序员入门的C/C++编程书籍PDF版
  11. flash视频的param属性解释
  12. 谷歌浏览器被7654恶意篡改主页解决办法
  13. 签租房电子合同必须留意什么地方?
  14. 计算机制作画报说课稿,幼儿园小班主题秋的画报说课稿教案反思
  15. 又一个程序猿的奋斗史——第二章 实习
  16. android 服务英文,Android recovery 模式 中英文对照
  17. sql优化和索引常见的面试题(面试总结)
  18. bga封装扇出_扇出型封装为何这么火?
  19. 阿里数学竞赛决赛名单公布:北大人数是清华4倍 | 最小仅14岁
  20. 牛逼!这个 Python 时间格式转换工具太优秀了!

热门文章

  1. oracle 命令分析
  2. redis 高可用
  3. mcrp 对接软件换
  4. Kali Linux与Ubuntu的ssh服务
  5. samba 设置文件的读写权限
  6. 原子操作、互斥锁、读写锁
  7. [BZOJ1635][Usaco2007 Jan]Tallest Cow 最高的牛
  8. 为Python终端提供持久性历史记录
  9. oracle中PLSQL存储过程中如何使用逗号分隔的集合(逗号分隔字符串转换为一个集合)...
  10. (转)Bootstrap 之 Metronic 模板的学习之路 - (4)源码分析之脚本部分