第7章 MFC原理与方法new.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 MFC原理与方法new

宏就是用预处理指令#define定义一个标识符,用它来表示一个字符串或一段源代码。MFC宏作为MFC类库的一个组成部分在MFC应用程序中经常出现。MFC宏在Afxwin.h、Afx.h及Afxmsg_.h等MFC头文件中分别进行了定义。 MFC提供的宏有很多,常用的包括消息映射宏、运行时类型识别的宏、调试宏和异常宏等,下表列出了一般MFC编程时要用到的宏。 7.5 MFC宏 ? RUNTIME_CLASS 获得运行时类的CRuntimeClass结构的 DECLARE_DYNAMIC 提供基本的运行时类型识别(声明) IMPLEMENT_ DYNAMIC 提供基本的运行时类型识别(实现) DECLARE_DYNCREATE 动态创建(声明) IMPLEMENT_DYNCREATE 动态创建(实现) DECLARE_SERIAL 对象序列化(声明) IMPLEMENT_SERIAL 对象序列化(实现) DECLARE_MESSAGE_MAP 声明消息映射表 BEGIN_MESSAGE_MAP 开始建立消息映射表 END_MESSAGE_MAP 结束建立消息映射表 ON_COMMAND 命令消息映射宏 ON_MESSAGE 自定义消息映射宏 ON_WM_… MFC预定义消息映射宏 ON_BN_… , ON_CBN_… 等 控件通知(Notification)消息映射宏 运行时类型识别RTTI(Run Time Type Information)是指在程序运行时允许确定对象的类型。MFC扩充了一般C++中运行时类型识别的功能,当一个类支持MFC的运行时类型识别时,它允许程序获取对象的信息(如类名、所占存储空间大小及版本号等)和基类信息。 1. 宏RUNTIME_CLASS(class_name): 返回参数class_name所指定类的静态成员变量class##class_name的指针,该指针指向一个CRuntimeClass结构。 7.5.1 有关运行时类型识别的宏 2. 动态支持宏DECLARE_DYNAMIC()和IMPLEMENT_DYNAMIC(): 使用动态支持宏能够使CObject派生类的对象具有基本的类型识别机能,可以通过调用成员函数CObject::IsKindOf()测试对象与给定类的关系。 3. 动态创建宏DECLARE_DYNCREATE()和IMPLEMENT_DYNCREATE(): 动态创建是动态支持的一个超集,除了基本的类型识别机能,使用动态创建宏能够使CObject的派生类具有在运行时动态创建对象的功能。 4. 序列化宏DECLARE_SERIAL() 和IMPLEMENT_SERIAL() 跟踪声明和断言在查找程序设计错误时是非常有用的。跟踪声明可以让程序在运行过程中遇到跟踪声明时在输出窗口显示指定的信息,而断言使程序在断言条件不成立时暂停程序的运行。MFC提供了一些跟踪声明和断言宏用于程序调试,这些宏只能用于DEBUG版本应用程序的调试状态。 1.TRACE()宏语法说明如下: TRACE (表达式); 其中参数表达式是由输出格式和变量等组成的输出表达式,其格式与函数printf()的参数一样,它指定调试时要在Output窗口输出的内容。 7.5.2 MFC调试宏 2、ASSERT断言宏 ( 参见P287) 3、ASSERT_VALID断言有效宏 ( 参见p287--288) char* szName = “LiMing”; int nAge = 18; TRACE(“Name = %s, Age = %d \n”, szName, nAge ); 例1 对于以下代码: 调试时在Output窗口输出以下内容: Name = LiMing, Age = 18 例2 设自定义一个CFrameWnd的派生类CMyFrame,在程序中构建一个与CMyFrame相关联的文档模板对象,并为构键的文档模板创建框架窗口: CMyFrame* pFrame=(CMyFrame*) AfxGetMainWnd(); ASSERT(pFrame-IsKindOf( RUNTIME_CLASS (CMyFrame))); // 判断pFrame的类型 pFrame-DoSomeOperation(); 7.6.1 CRuntimeClass结构 CRuntimeClass在MFC中是以结构的方式定义,它含有使用CRuntimeClass结构的类的有关信息,与CO

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档