Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16497722
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:56:36

下载本文示例代码
天极IT资讯短信服务 电脑小技巧 function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } 资费:包月5元手机: 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。(首月免费)   消息映射  消息的传递与发送是Windows应用程序的核心所在,任何事件的触发与响应均要通过消息的作用才能得以完成。在SDK编程中,对消息的获取与分发主要是通过消息循环来完成的,而在MFC编程中则是通过采取消息映射的方式对其进行处理的。相比而言,这样的处理方式要简单许多,这也是符合面向对象编程中尽可能隐含实现细节的原则。  一个完整的MFC消息映射包括对消息处理函数的原型声明、实现以及存在于消息映射中的消息入口。这几部分分别存在与类的头文件和实现文件中。一般情况下除了对自定义消息的响应外,对于标准Windows 消息的映射处理可以借助ClassWizard向导来完成。  在选定了待处理的Windows 消息后,向导将会根据消息的不同而生成具有相应函数参数和返回值的消息处理代码框架。下面这段代码给出了一个完成的MFC消息映射过程: // 在.h文件中的声明//{{AFX_MSG(CMessageMapView)afx_msg void OnMove(int x, int y);//}}AFX_MSGDECLARE_MESSAGE_MAP()……// 在.cpp文件中的实现BEGIN_MESSAGE_MAP(CMessageMapView, CView)//{{AFX_MSG_MAP(CMessageMapView)ON_WM_MOVE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()……void CMessageMapView::OnMove(int x, int y) {CView::OnMove(x, y);// TODO: Add your message handler code here}  这里对Windows标准消息WM_MOVE做了消息映射,其中用到的BEGIN_MESSAGE_MAP、END_MESSAGE_MAP和头文件中的DECLARE_MESSAGE_MAP等均是用于消息映射的宏。这些宏声明了在应用程序框架中可用于在系统中浏览所有对象映射的成员变量和函数。除了以上三个比较常见的宏之外,MFC还提供了其他一些用于消息映射的宏,详情可参见下表: 宏名 说明 DECLARE_MESSAGE_MAP 在头文件声明源文件中所含有的消息映射 BEGIN_MESSAGE_MAP 标记源文件消息映射的开始 END_MESSAGE_MAP 标记源文件消息映射的结束 ON_COMMAND 将特定命令的处理委派给类的一个成员函数 ON_CONTROL 映射一个函数到一个定制控制通知消息。其中,定制控制通知消息是从一个控制发送到其父窗口的消息。 ON_CONTROL_RANGE 将一个控制ID的范围映射到一个消息处理函数 ON_CONTROL_REFLECT 映射一个由父窗口反射回控制的通知消息 ON_MESSAGE 将一个用户自定义消息映射到一消息处理函数 ON_NOTIFY 映射一个控制消息到一个函数 ON_NOTIFY_RANGE 映射一个控制ID范围内的控制消息到一个函数 ON_NOTIFY_EX 映射一个控制消息到一个函数,该成员函数返回FALSE或TRUE来表明通知是否应被传送到下一个对象以进行其他反应。 ON_NOTIFY_EX_RANGE 映射一个控制ID范围内的控制消息到一个函数,该成员函数返回FALSE或TRUE来表明通知是否应被传送到下一个对象以进行其他反应 ON_NOTIFY_REFLECT 映射一个控制消息到一个函数。该消息将会被控制的父窗口反射回来。 ON_REGISTERED_MESSAGE 映射一个唯一的消息到一个将要处理该注册消息的函数上。该消息是由RegisterWindowMessage()函数注册的。 ON_UPDATE_COMMAND_UI 映射一个函数来处理一个用户接口更新命令消息 ON_UPDATE_COMMAND_UI_RANGE 映射一个命令ID的范围到一个更新消息处理函数  一般作为基类使用的CWnd类为Windows消息定义了大量窗口消息的缺省处理函数,这些函数大部分只是简单地调用了Windows的缺省过程,可以在派生类中对其进行重载。但是MFC应用程序框架却并没有象使用普通虚函数那样使用Windows消息处理函数,而是通过宏将指定的消息映射到派生类的成员函数。如果MFC仍象普通虚函数一样对消息响应函数进行处理,那么CWnd类就要为这上百个消息声明虚函数。而C 将为在程序中使用的每一个派生类都提供一个被称作vtable的虚拟函数分配表,这个分配表需要为每一个虚函数提供一个4字节的入口,而不管这些函数在派生类中是否真正被重载,这将不能有效利用存储空间。而且对于每一个不同类型的窗口或控件,应用程序都要为其提供一个超过400字节的虚拟函数分配表来实现对消息的响应。而采用MFC的用宏将Windows消息映射到C 成员函数的方式则可避免产生庞大的虚拟函数分配表,其消耗的内存是同它所包含的消息入口数量成正比的。共3页。 1 2 3 : 天极IT资讯短信服务 电脑小技巧 function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } 资费:包月5元手机: 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。(首月免费)   消息映射  消息的传递与发送是Windows应用程序的核心所在,任何事件的触发与响应均要通过消息的作用才能得以完成。在SDK编程中,对消息的获取与分发主要是通过消息循环来完成的,而在MFC编程中则是通过采取消息映射的方式对其进行处理的。相比而言,这样的处理方式要简单许多,这也是符合面向对象编程中尽可能隐含实现细节的原则。  一个完整的MFC消息映射包括对消息处理函数的原型声明、实现以及存在于消息映射中的消息入口。这几部分分别存在与类的头文件和实现文件中。一般情况下除了对自定义消息的响应外,对于标准Windows 消息的映射处理可以借助ClassWizard向导来完成。  在选定了待处理的Windows 消息后,向导将会根据消息的不同而生成具有相应函数参数和返回值的消息处理代码框架。下面这段代码给出了一个完成的MFC消息映射过程: // 在.h文件中的声明//{{AFX_MSG(CMessageMapView)afx_msg void OnMove(int x, int y);//}}AFX_MSGDECLARE_MESSAGE_MAP()……// 在.cpp文件中的实现BEGIN_MESSAGE_MAP(CMessageMapView, CView)//{{AFX_MSG_MAP(CMessageMapView)ON_WM_MOVE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()……void CMessageMapView::OnMove(int x, int y) {CView::OnMove(x, y);// TODO: Add your message handler code here}  这里对Windows标准消息WM_MOVE做了消息映射,其中用到的BEGIN_MESSAGE_MAP、END_MESSAGE_MAP和头文件中的DECLARE_MESSAGE_MAP等均是用于消息映射的宏。这些宏声明了在应用程序框架中可用于在系统中浏览所有对象映射的成员变量和函数。除了以上三个比较常见的宏之外,MFC还提供了其他一些用于消息映射的宏,详情可参见下表: 宏名 说明 DECLARE_MESSAGE_MAP 在头文件声明源文件中所含有的消息映射 BEGIN_MESSAGE_MAP 标记源文件消息映射的开始 END_MESSAGE_MAP 标记源文件消息映射的结束 ON_COMMAND 将特定命令的处理委派给类的一个成员函数 ON_CONTROL 映射一个函数到一个定制控制通知消息。其中,定制控制通知消息是从一个控制发送到其父窗口的消息。 ON_CONTROL_RANGE 将一个控制ID的范围映射到一个消息处理函数 ON_CONTROL_REFLECT 映射一个由父窗口反射回控制的通知消息 ON_MESSAGE 将一个用户自定义消息映射到一消息处理函数 ON_NOTIFY 映射一个控制消息到一个函数 ON_NOTIFY_RANGE 映射一个控制ID范围内的控制消息到一个函数 ON_NOTIFY_EX 映射一个控制消息到一个函数,该成员函数返回FALSE或TRUE来表明通知是否应被传送到下一个对象以进行其他反应。 ON_NOTIFY_EX_RANGE 映射一个控制ID范围内的控制消息到一个函数,该成员函数返回FALSE或TRUE来表明通知是否应被传送到下一个对象以进行其他反应 ON_NOTIFY_REFLECT 映射一个控制消息到一个函数。该消息将会被控制的父窗口反射回来。 ON_REGISTERED_MESSAGE 映射一个唯一的消息到一个将要处理该注册消息的函数上。该消息是由RegisterWindowMessage()函数注册的。 ON_UPDATE_COMMAND_UI 映射一个函数来处理一个用户接口更新命令消息 ON_UPDATE_COMMAND_UI_RANGE 映射一个命令ID的范围到一个更新消息处理函数  一般作为基类使用的CWnd类为Windows消息定义了大量窗口消息的缺省处理函数,这些函数大部分只是简单地调用了Windows的缺省过程,可以在派生类中对其进行重载。但是MFC应用程序框架却并没有象使用普通虚函数那样使用Windows消息处理函数,而是通过宏将指定的消息映射到派生类的成员函数。如果MFC仍象普通虚函数一样对消息响应函数进行处理,那么CWnd类就要为这上百个消息声明虚函数。而C 将为在程序中使用的每一个派生类都提供一个被称作vtable的虚拟函数分配表,这个分配表需要为每一个虚函数提供一个4字节的入口,而不管这些函数在派生类中是否真正被重载,这将不能有效利用存储空间。而且对于每一个不同类型的窗口或控件,应用程序都要为其提供一个超过400字节的虚拟函数分配表来实现对消息的响应。而采用MFC的用宏将Windows消息映射到C 成员函数的方式则可避免产生庞大的虚拟函数分配表,其消耗的内存是同它所包含的消息入口数量成正比的。共3页。 1 2 3 : 下载本文示例代码


深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知深入VC 消息映射与命令通知
阅读(165) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~