MFC 自定义消息的一般过程
2015-07-25 19:06
246 查看
1).在相关类的头文件顶部添加如下所示的字串(以CMyDlg类为例):
在CMyDlg.h中添加#define WM_MY_MESSAGE (WM_USER+100) 注意:在源文件(。cpp)也可以的。
1 2
其中1位置处的消息名可以自定,位置2处是确保消息在程序中唯一性,所以用(WM_USER+数值)的形式来表示,数值不可为负.
2).在消息定义完成后,需要转到相应类的源程序文件CMyDlg.cpp中,在如下所示的固定结构间添加消息与函数的映射.
BEGIN_MESSAGE_MAP(CTestdisockDlg, CDialog)
//{{AFX_MSG_MAP(CTestdisockDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
例如要添加上面已经定义好的消息,添加后的结构如下:
BEGIN_MESSAGE_MAP(CTestdisockDlg, CDialog)
//{{AFX_MSG_MAP(CTestdisockDlg)
ON_MESSAGE(WM_NOTIFY_MESSAGE, OnMyMessage) //3
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
其中3所示的行即是添加的内容.要注意自定义消息是以ON_MESSAGE()的形式映射,第一个参数是上面已经定义好的消息名,第二个参数是该消息的映射函数,消息是函数的触发条件.无消息到达时该函数永远不被执行.
3).上面的完成后,需要转到CMyDlg.h文件中,也就是定义类的文件中,在如下的结构中申明刚才映射好的函数.
//{{AFX_MSG(CTestdisockDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP() //找位置的时候,以该行出现的地方为准.
添加函数后的结构如下,与普通的申明稍有区别.
//{{AFX_MSG(CTestdisockDlg)
virtual BOOL OnInitDialog();
afx_msg OnMyMessage(); //4
//}}AFX_MSG
DECLARE_MESSAGE_MAP() //找位置的时候,以该行出现的地方为准,添加函数后的结构如下,与普通的申明稍有区别.
位置4对应的行是加上的函数申明,如果有参数就写带参的形式,其中afx_msg 头是所有与消息有关的函数必须加的标识.
最后一步就是到源文件CMyDlg.cpp中写函数的实现部分,也就是具体的编程.
消息的触发是靠SendMessage()或PostMessage()函数完成的,它们的第一个参数就是指定把消息发往那个窗口,发送成功后,映射函数就会被调用执行。
在CMyDlg.h中添加#define WM_MY_MESSAGE (WM_USER+100) 注意:在源文件(。cpp)也可以的。
1 2
其中1位置处的消息名可以自定,位置2处是确保消息在程序中唯一性,所以用(WM_USER+数值)的形式来表示,数值不可为负.
2).在消息定义完成后,需要转到相应类的源程序文件CMyDlg.cpp中,在如下所示的固定结构间添加消息与函数的映射.
BEGIN_MESSAGE_MAP(CTestdisockDlg, CDialog)
//{{AFX_MSG_MAP(CTestdisockDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
例如要添加上面已经定义好的消息,添加后的结构如下:
BEGIN_MESSAGE_MAP(CTestdisockDlg, CDialog)
//{{AFX_MSG_MAP(CTestdisockDlg)
ON_MESSAGE(WM_NOTIFY_MESSAGE, OnMyMessage) //3
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
其中3所示的行即是添加的内容.要注意自定义消息是以ON_MESSAGE()的形式映射,第一个参数是上面已经定义好的消息名,第二个参数是该消息的映射函数,消息是函数的触发条件.无消息到达时该函数永远不被执行.
3).上面的完成后,需要转到CMyDlg.h文件中,也就是定义类的文件中,在如下的结构中申明刚才映射好的函数.
//{{AFX_MSG(CTestdisockDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP() //找位置的时候,以该行出现的地方为准.
添加函数后的结构如下,与普通的申明稍有区别.
//{{AFX_MSG(CTestdisockDlg)
virtual BOOL OnInitDialog();
afx_msg OnMyMessage(); //4
//}}AFX_MSG
DECLARE_MESSAGE_MAP() //找位置的时候,以该行出现的地方为准,添加函数后的结构如下,与普通的申明稍有区别.
位置4对应的行是加上的函数申明,如果有参数就写带参的形式,其中afx_msg 头是所有与消息有关的函数必须加的标识.
最后一步就是到源文件CMyDlg.cpp中写函数的实现部分,也就是具体的编程.
消息的触发是靠SendMessage()或PostMessage()函数完成的,它们的第一个参数就是指定把消息发往那个窗口,发送成功后,映射函数就会被调用执行。
相关文章推荐
- 自增和自减
- js canvas画柱状图 没什么高端的 就是一篇偶尔思路的
- MFC 如何添加自定义消息
- Combination Sum II
- 【javaweb】Session原理以及浏览器禁止Cookie之后服务器如何获取Session
- Raid1源代码分析--写流程
- mysql数据库中如何修改已建好的表中的【列名】【列的属性】
- MFC子窗口向父窗口发送消息
- 最短路之Dijkstra算法
- 用xib自定义UITableViewCell的注意事项——重用问题
- ECharts学习总结(二):标签式单文件引入echarts的方法
- Python项目7:自定义公告板
- IOS实现在后台执行一定时间的任务
- c#中的程序集
- poj1007
- 基于Linux的智能家居的设计(4)
- Linux引导:历史和未来
- Hdu 4916 Count on the path
- ZOJ 3822 可能性DP
- MYSQL---%