MFC的自定义消息的定义与使用
自定义消息的响应和资源消息的响应有很多类似之处;资源消息的响应是以资源的ID号作为标识的;自定义的消息要自己声明消息ID。
一. 定义:
第一步要声明消息:
#define WM_MYMSG WM_USER+200
第二步要在类声明中声明消息映射:
DECLARE_MESSAGE_MAP()
第三步要在类声明中定义消息处理函数:
afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM);
在.cpp中做的工作:
第四步要实现消息映射:
BEGIN_MESSAGE_MAP()
ON_MESSAGE(WM_MYMSG,OnMyMsgHandler)
END_MESSAGE_MAP()
第五步要实现消息处理函数(当然可以不实现):
LRESULT CMainFrame::OnMyMsgHandler(WPARAM w,LPARAM l)
{
AfxMessageBox("Hello,World!");
return 0;
}
二. 使用
1. 如果该自定义消息所在的类是有CWnd派生出来的,且在本类中调用,那么我们可以调用CWnd::SendMessage()函数,具体定义为:
LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
此时我们只需要在引发消息的地方添加如下代码:
SendMessge(WM_MYMSG,0,0);
如果我们想在不同的情况下发送用户消息,我们只需要将SendMessage的后两个参数wParam,lParam加以标识即可;在消息处理函数,写一个if条件语句(或switch语句)就可以了;将不同情况下的用户消息区分开;
例如看下面的例子:
在CCDlg类的实现文件中加入消息响应函数的实现部分,代码如下:
在主框架的“帮助”主菜单中加入“自定义消息”子菜单,其ID设为ID_CUSTOMIZE,通过类向导响应该命令,函数名默认。其函数体如下:
2. 如果不在本类中响应自定义消息;那么我们只能用win32 的API函数;例如,当自定义消息在CMainFrame中,而触发消息的地方不在CMainFrame类中,那么我们可以用如下语句:
::SendMessge(::AfxGetMainWnd()->m_hWnd,WM_MYMSG,0,0);
相关内容网址:
http://www.cnblogs.com/smartvessel/archive/2011/07/18/2109472.html
http://blog.csdn.net/penpenandtongtong/article/details/18598907
http://www.oschina.net/question/565065_72596
http://blog.chinaunix.net/uid-24459558-id-299010.html
MFC的自定义消息的定义与使用的更多相关文章
- MFC发送自定义消息-PostMessage和SendMessage
PostMessage:把消息投放到线程的消息队列,不能消息被处理就立即返回SendMessage:消息被处理完后才返回 几种发送消息的写法: ::PostMessage(GetSafeHwnd( ...
- MFC用户自定义消息
之前做过佳能相机和位移平台的额二次开发,当时遇到一个棘手的问题,就是位移平台如何知道相机已经拍完照了,或者相机如何知道位移平台已经运行到指定位置,当时为了方便采用了定时器来定时检测位移平台的位置,结果 ...
- MFC添加自定义消息
由于MFC中无法通过类向导来自定义消息,所以需要手动添加,主要过程如下: 本文基于vs2008下通过线程实现数据实时更新的对话框运用程序 1. 定义消息(Resource.h文件中): 由于很多新控件 ...
- MFC消息-自定义消息
转:http://blog.csdn.net/penpenandtongtong/article/details/18598907 像MFC的窗口发送消息,可以进行自定义的动作行为,因此很多时候非常有 ...
- MFC中全局变量的定义及使用
用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行.实际上有多种方法可以实现,这里只介绍两种 ...
- MFC中 自定义消息
想在对话框显示出来后立即执行一段代码. 方法之一是自定义消息,即添加一个自定义的消息在消息队列中等待对话框初始化之后从消息队列中读取消息执行代码. 在OnInitDialog返回之前post一个自定义 ...
- MFC中自定义消息
在头文件stdafx.h中增加一个自定义消息宏 #define WM_USER_THREADEND WM_USER + 1 在于增加新消息的窗口或对话框类的头文件中增加一个回调函数声明 afx_msg ...
- 20190108C++MFC error 2065 未定义XX原因以及解决方式
今天写界面的时候,明明直接在rc和reourse.h里面加了控件下面是rc和reourse.h照片 编辑的时候一直报错,找了很久发现是新定义的控件有两处定义,定义到其他工程里了所以才会这样,把其他工程 ...
- VC/MFC中为程序定义全局快捷键
VC 2010-05-01 18:01:34 阅读287 评论0 字号:大中小 订阅 1.注册快捷键 在初始化函数,如OnInitDialog() 注册快捷键,代码如下: #define HotKey ...
随机推荐
- ios学习之UISwipeGestureRecognizer手势识别
ios学习之UISwipeGestureRecognizer手势识别 本文部分转自俺是一个瓜娃!!!的博客UISwipeGestureRecognizer ---手指动作,转载过来仅是为了自己查询 ...
- Day20_IO第二天
1.IO体系总图 2.IO体系--字节流 记忆路线:输入输出流前面加File和Buffered,这样就全记住了 3.表达式解释 表达式:由变量和常量通过运算符连接起来的式子,单个的常量和变量也是表达式 ...
- 纯js轮播效果(减速效果)待改进
HTML代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- YHMMR003 农户基本信息的维护程序
*********************************************************************** * Title : * * Application : ...
- JavaScript中“typeof”运算符与“instanceof”运算符的差异
在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了 ...
- javascript_data
var now = new Date(); // Wed Jun 24 2015 19:49:22 GMT+0800 (CST) now; // 2015, 年份 now.getFullYear(); ...
- cg资讯网址
cg教程下载: http://cgpeers.com http://cgpersia.com http://bbs.ideasr.com/forum-328-1.html http://bbs.ide ...
- 黄聪:如何关闭phpstorm的typo拼写检查
文件-设置-编辑器-inspections-spelling-typo
- RMAN_学习笔记5_RMAN Catalog Script恢复目录脚本
2014-12-24 Created By BaoXinjian
- 文件大boss
1.write() 写命令 f=open("a2.txt",'w',encoding='utf-8') f.write() f.close() 2.closed 判断是否是关闭 ...