MFC开发IM-第二十篇、MFC添加自定义消息
转载来自
:
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添加自定义消息相关推荐
- LinuxGUI自动化测试框架搭建(二十一)-截止第二十篇,如果出现以下错误,请修改代码+截止目前的全局配置文件config.py内容
(二十一)-截止第二十篇,如果出现以下错误,请修改代码 1 错误类型 2 原因分析 3 解决方法 4 修改common/screenShot.py 5 修改config/config.py 1 错误类 ...
- MFC开发IM-第二十六篇、vs2008添加库文件
[Setting]VS2008项目怎样添加"依赖(lib)"."库目录(Libs)"."包含目录(include)"和"引用动态链 ...
- MFC开发IM-第二十四篇、使用 acl 库针对 C++ 对象进行序列化及反序列编程
在开发网络应用程序时,各个模块之间的数据通信可谓是家常便饭,为了应对这些数据通信时数据交换的要求,程序员发明了各种数据格式:采用二进制数据结构(早期 C 程序员).采用 XML.采用SOAP(坑人的设 ...
- MFC开发IM-第二十八篇、acl 的编译与使用
转载来自::: http://zsxxsz.iteye.com/blog/1506554 ------------------------------------------- acl 库的功能参见文 ...
- MFC开发IM-第二十五篇、往MFC编辑框最后面追加文本
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT); int nLength = pEdit->GetWindowTextLength(); //选定当前文本 ...
- MFC开发IM-第二十二篇、C++中 Unicode 与 UTF-8 编码互转
1.简述 最近在发送网络请求时遇到了中文字符乱码的问题,在代码中调试字符正常,用抓包工具抓的包中文字符显示正常,就是发送到服务器就显示乱码了,那就要将客户端和服务器设置统一的编码(UTF-8),而我们 ...
- MFC开发IM-第二十七篇、如何引入acl,解决Json解析问题
1.下载acl库,下载地址:::: https://download.csdn.net/download/golddaniu/10302417 2.引入库文件 #pragma comment(lib, ...
- MFC开发IM-第二十三篇、C++中 UTF-8转成Unicode
实现代码 //UTF-8转成Unicode int length; wchar_t* wCharUnicode = L"中国你好"; length = wcslen(wCharUn ...
- MFC开发IM-第二十一篇、Unicode转成Utf8
//UnicodeToUtf8 Unicode转成Utf8 char* mainDlg::UnicodeToUtf8(const wchar_t* unicode) { int len; ...
最新文章
- ItClust:利用迁移学习解决scRNA-seq中的细胞聚类问题
- 3000+ NLP资源一网打尽,只需用这个分类检索网站 | 免费
- 课程分类管理-添加课程分类
- python:栈的理解与应用,让你快速入门Python
- Acey.ExcelX实例演练(1)—从GridView中导出Excel报表
- 从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理
- java每隔多长时间执行一次_crontab中如何实现每隔多少天执行一次脚本
- bzoj 3028 食物——生成函数
- am335x sd卡启动系统参数设置
- 20本适合C/C++程序员入门的C/C++编程书籍PDF版
- flash视频的param属性解释
- 谷歌浏览器被7654恶意篡改主页解决办法
- 签租房电子合同必须留意什么地方?
- 计算机制作画报说课稿,幼儿园小班主题秋的画报说课稿教案反思
- 又一个程序猿的奋斗史——第二章 实习
- android 服务英文,Android recovery 模式 中英文对照
- sql优化和索引常见的面试题(面试总结)
- bga封装扇出_扇出型封装为何这么火?
- 阿里数学竞赛决赛名单公布:北大人数是清华4倍 | 最小仅14岁
- 牛逼!这个 Python 时间格式转换工具太优秀了!