博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC 自定义消息的一般过程
阅读量:2382 次
发布时间:2019-05-10

本文共 1159 字,大约阅读时间需要 3 分钟。

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()函数完成的,它们的第一个参数就是指定把消息发往那个窗口,发送成功后,映射函数就会被调用执行。

转载地址:http://rcuab.baihongyu.com/

你可能感兴趣的文章
DIYer最担心的事来了!CPU降价彻底无望
查看>>
WannaCry勒索软件还在继续传播和感染中
查看>>
为发展中国家儿童提供的OLPC OS 13.2.10 发布
查看>>
帅的代价!无框车门冻死:特斯拉一招解决
查看>>
美银美林提高Intel科技股的股票评级
查看>>
专家预测2019年的网络安全形势
查看>>
简单聊聊Linux学习经历
查看>>
欧盟即将在免费开源软件项目中推行“漏洞赏金”
查看>>
苹果股价下跌会迎来iPhone最黑暗时刻吗?
查看>>
智能校服受到多数学生追捧
查看>>
这么多CPU/显卡成就是AMD首创:大写的YES
查看>>
java实现解压缩(Unzip)功能的实现
查看>>
java操作Access *.mdb数据库的实现
查看>>
jdbc连接数据库的代码片段
查看>>
X86汇编:debug命令详解
查看>>
flex(通过URLLoader)与后台jsp进行交互的例子,包括中文乱码的处理
查看>>
Flex HTTPService如何给后台传递参数
查看>>
Flex取得客户端的IP地址
查看>>
不vista下安装oracle10g(r2)注意事项
查看>>
文件列表输出到文件
查看>>