利用MFC消息映射机制自定义消息

来源:互联网 发布:深圳通充值软件 编辑:程序博客网 时间:2024/06/07 20:34

Windows系统中的程序大部分都是通过消息和事件驱动的。在windows下的应用程序主要工作是进行消息的循环处理,通过循环等待消息的到来和事件的发生,然后对不同的消息和事件运行相关的代码,完成相应的操作。Windows提供了大量的消息,主要包括3种类型:标准消息、通知消息和命令消息。当然也可以根据用户的需要自定义一些消息。这些消息在MFC中有统一的处理框架,即消息映射机制。消息映射机制将消息及其处理函数表示成一一对应的表,并对这张表进行分析处理。

总的来说,MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可以知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。

无论时利用MFC向导还是手动添加消息处理时,都需要在源文件中增加三处代码:

1、在类的定义中添加消息处理成员函数的函数声明。

2、在类的消息映射表中加入相应的消息映射表项。

3、在类的实现中加入该消息处理成员函数的函数实现。

如果时自定义消息,则还需要在头文件中定义自定义消息的宏。

例如:要在ABC类中添加个自定义消息UM_AAA的处理,当消息产生的时候,响应OnAAA( )函数。可以按照下面四个步骤来实现:

1、在头文件ABC.H中定义自定义消息的宏。

#define UM_AAA   WM_USER+1

在windows系统中提供了大量的消息的同时可以给用户自定义消息提供了空间,我们在自定义消息的宏的时,只有选择WM_USER以上的数值就不会与系统提供的消息冲突了。

2、在头文件ABC.H中声明消息响应函数的OnAAA( )。

protected:

      //{{AFX_MSG (ABC)

      afx_msg  void  OnAAA( );

      //}}AFX_MSG

      DECLARE_MESSAGE_MAP( )

消息响应函数应该放在DECLARE_MESSAGE_MAP( )之前,AFX_MSG注释宏之间。该函数声明前不有一个afx_msg限定符,这也是一个宏,这个宏表面这个函数是一个消息响应函数的声明。

3、进行消息映射

BEIGIN_MESSAGE_MAP(ABC)

//{{AFX_MSG_MAP(ABC)

ON_MESSAGE(UM_AAA, OnAAA)

//}}AFX_MSG_MAP

END_MESSAGE_MAP( )

在END_MESSAGE_MAP( )之前的AFX_MSG_MAP注释宏之间用ON_MESSAGE( )将UM_AAA和OnAAA响应函数相关联起来。

4、在ABC.CPP中将消息响应函数的实现

void  OnAAA( )

{……}

只有按照上面的4个步骤,就可以根据自己的需要,在系统程序中添加合适的消息和响应函数了。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 dnf账号改错名了怎么办 银行卡绑定的手机号码换了怎么办 支付宝手机号码换了怎么办 淘宝账号被注销了怎么办 注销淘宝号绑定的手机号怎么办 淘宝账号不小心注销了怎么办 淘宝旧密码忘了怎么办 淘宝登录原始密码忘记了怎么办 微信原始密码忘记了怎么办 优酷会员重复交费怎么办 微信解绑手机号密码忘了怎么办 闪银呼呼逾期5天怎么办 忘记淘宝账号和密码怎么办 蘑菇街账号忘了怎么办 台式电脑密码忘记了怎么办 单位社保登陆密码忘记了怎么办 12306的登录密码忘了怎么办 网银支付密码忘了怎么办 邮政网银密码忘了怎么办 12306新注册待核验怎么办 建行网银盾密码忘了怎么办 建行网银登陆密码忘了怎么办 建行网银密码忘了怎么办 建行手机网银密码忘了怎么办 移动宽带账号密码忘了怎么办 移动宽带忘记账号密码怎么办 宽带账号密码忘了怎么办 不知道宽带账号密码怎么办 宽带的账号密码忘记了怎么办 wifi登录名忘记了怎么办 苹果手机微信图纸打不开怎么办 手机qq邮箱文件打不开怎么办 12360忘记用户名和密码怎么办 刚开店铺没生意怎么办 淘宝账户不符合注销条件怎么办 网易邮箱登录密码忘记了怎么办 q号密码忘记了怎么办 志愿者注册忘记密码和用户名怎么办 w10电脑语言栏不见了怎么办 w10美式键盘没了怎么办 xp电脑开机密码忘记了怎么办