MFC宏定义详解_第1页
MFC宏定义详解_第2页
MFC宏定义详解_第3页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、很不错的一篇文章,很多不明白的地方在此讲的很清楚,很完整,主要是MFC 的宏定义了站长黑森林推荐!AND_CATCHAND_CATCHAND_CATCH(exception_class,exception _object_point_name说明:定义一个代码块,它用于获取废除当前 TRY 块中的附加异常类型。使用 CATCH 宏以获得一个异常类型,然后使用 AND_CATCH 宏获得随后的异常处理代码可以访问异常对象(若合适的话 已得到关于异常的特别原因的更多消息。在 AND_CATCH 块中调用 THROW_LAST 宏以便把处理过程移到下个外部异常框架。 AND_CATCH 可标记 CA

2、TCH 或 AND_CATCH 块的末尾。注释:AND_CATCH 块被定义成为一个C+作用域(由花括号来描述)。若用户在此作用域定义变量,那么记住他们只在此作用域中可以访问。他也用于exception_object_pointer_name变量。ASSERTASSERT(booleanExpression说明:计算变量的值。如果结构的值为 0,那么此宏便打印一个诊断消息并且成讯运行失败。如果条件为非 0,那么什么也不做。 诊断消息的形式为: assertion failed in file in line 其中 name 是元文件名, num 是源文件中运行失败的中断号。 在Release版

3、中, ASSERT 不计算表达式的值也就不中断程序。如果必须计算此表达式的值且不管环境如何那么用VERIFY 代替 ASSERT 。注释:ASSERT 只能在 Debug 版中用ASSERT_VAILDASSERT_VAILD(pObject说明:用于检测关于对象的内部状态的有效性。ASSERT_VALID 调用此对象的AssertValid 成员函数(把它们作为自己的变量来传递)。在Release版中ASSERT_VALID 什么也不做。在DEBUG版中,他检查指针,以不同于NULL 的方式进行检查,并调用对象自己的AssertValid 成员函数。如果这些检测中有任何一个失败的话,那么他会

4、以与ASSERT 相同的方法显示一个警告的消息。注释:此函数只在 DEBUG 版中有效。BEGIN_MESSAGE_MAPBEGIN_MESSAGE_MAP(the class,baseclass说明:使用 BEGIN_MESSAGE_MAP 开始用户消息映射的定义。在定义用户类函数的工具( .cpp )文件中,以 BEGIN_MESSAGE_MAP 宏开始消息映射,然后为每个消息处理函数增加宏项,接着以 END_MESSAGE_MAP 宏完成消息映射。CATCHCATCH(exception_class,exception_object_pointer_name说明:使用此用定义一个代码块,

5、此代码用来获取当前 TRY 块中都一个异常类型。异常处理代码可以访问异常对象,如何合适的话,就会得到关于异常的特殊原因的更多消息。调用 THROW_LAST 宏以把处理过程一下一个外部异常框架,如果exception-class是类 CExceptioon, 那么会获取所有异常类型。用户可以使用 CObject:IsKindOf 成员函数以确定那个特别异常被排除。一种获取异常的最好方式是使用顺序的 AND_CATCH 语句,每个带一个不同的异常类型。此异常类型的指针由宏定义,用户不必定义。注释:此 CATCH 块被定义作一个 C+范围(由花括号描述)。如用户在此范围定义变量,那么它们只在吃范围

6、内可以访问。他还可以用于异常对象的指针名。DEBUG_NEW#define new DEBUG_NEW说明:帮助查找内存错误。用户在程序中使用DEBUG_NEW, 用户通常使用 new 运算符来从堆上分配。在Debug 模式下(但定义了一个DEBUG 符号),DEBUG_NEW 为它分配的每个对象记录文件名和行号。然后,在用户使用CMemoryState:DumpAllObjectSince 成员函数时,每个以 DEBUG_NEW 分配的对象分配的地方显示出文件名和行号。为了使用DEBUG_NEW, 应在用户的资源文件中插入以下指令:#define new DEBUG_NEW一旦用户插入本指令

7、,预处理程序将在使用new 的地方插入 DEBUG_NEW ,而MFC 作其余的工作。但用户编译自己的程序的一个发行版时,DEBUG_NEW 便进行简单的 new 操作,而且不产生文件名和行号消息。DECLARE_DYNAMICDECLARE_DYNAMIC(class_name说明:但从 CObject 派生一个类时,此宏增加关于一个对象类的访问运行时间功能。把 DECLARE_DYNAMIC 宏加入类的头文件中,然后在全部需要访问词类对象的 .CPP 文件中都包含此模块。如果像所描述那样使用 DELCARE_DYNAMIC 和IMPLEMENT_DYNAMIC宏,那么用户便可使用RUNTI

8、ME_CLASS 宏和CObject:IsKindOf 函数以在运行时间决定对象类。如果 DECLARE_DYNAMIC 包含在类定义中,那么 IMPLEMETN_DYNAMIC 必须包含在类工具中。DECLARE_DYNCREATEDECLARE_DYNCREATE(class_name说明:使用 DECLARE_DYNCRETE 宏以便允许 CObject 派生类的对象在运行时刻自动建立。主机使用此功能自动建立新对象,例如,但它在串行化过程中从磁盘读一个对象时,文件及视图和框架窗应该支持动态建立,因为框架需要自动建立它。把 DECLARE_DYNCREATE 宏加入类的 .H 文件中,然后

9、在全部需要访问此类对象的 .CPP 文件中包含这一模式。如果 DECLARE_DYNCREATE 包含在类定义中,那么 IMPLEMENT_DYNCREATE 必须包含在类工具中。DECLARE_MESSAGE_MAPDECLARE_MESSAGE_MAP(说明:用户程序中的每个 CCmdTarget 派生类必须提供消息映射以处理消息。在类定义的末尾使用 DECLARE_MESSAGE_MAP 宏。接着,在定义类成员函数的 .CPP文件中,使用 BEGIN_MESSAGE_MAP 宏,每个用户消息处理函数的宏项下面的列表以及 END_MESSAGE_MAP 宏。注释:如果在 DECLARE_M

10、ESSAGE_MAP 之后定义任何一个成员,那么必须为他们指定一个新存取类型(公共的,私有的,保护的)。DECLARE_SERIALDECLARE_SERIAL(class_name说明:DECLARE_SERIAL 为一个可以串行化的CObject 派生类产生必要的C+标题代码。串行化是把某个对象的内容从一个文件读出和写入一文件。在.H 文件中使用 DECLARE_SERIAL 宏,接着在需要访问此类对象的全部 .CPP 文件中包含此文件。如果 DECLARE_SERIAL 包含在类定义中,那么 IMPLEMENT_SERIAL 必须包含在类工具中。 DECLARE_SERIAL 宏包含全部

11、DECLARE_DYNAMIC,IMPLEMENT_DYCREATE的功能。END_CATCHEND_CATCH说明:标识最后的 CATCH 或 AND_CATCH 块的末尾。END_MESSAGE_MAPEND_MESSAGE_MAP说明:使用 END_MESSAGE_MAP 宏结束用户的消息映射定义IMPLEMENT_DYNAMICIMPLEMENT_DYNAMIC(class_name,base_class_name说明:通过运行时在串行结构中为动态CObject 派生类访问类名和位置来产生必要的C+代码。在 .CPP 文件中使用 IMPLEMENT_DYNAMIC宏,接着一次链接结果对

12、象代码IMPLEMENT_DYNCREATEIMPLEMENT_DYNCREATE(class_name,base_class_name说明:通过 DECLARE_DYNCREATE宏来使用 IMPLEMENT_DYNCREATE宏,以允许 CObject 派生类对象在运行时自动建立。主机使用此功能自动建立对象,例如,但它在串行化过程中从磁盘读去一个对象时,他在类工具里加入IMPLEMENT_DYNCREATE 宏。若用户使用 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 宏, 那么接着使用 RUNTIME_CLASS 宏和 CObject:IsKindOf

13、成员函数以在运行时确定对象类。若 declare_dyncreate包含在定义中,那么 IMPLEMENT_DYNCREATE 必须包含在类工具中。IMPLEMENT_SERIALIMPLEMENT_SERIAL(class_name,base_class_name,wSchema说明:通过运行时在串行结构中动态CObject 派生类访问类名和位置来建立必要的C+代码。在 .CPP 文件中使用 IMPLEMENT_SERIAL宏,然后一次链接结果对象代码。ON_COMMANDON_COMMAND(id,memberFxn说明:此宏通过 ClassWizard 或手工插入一个消息映射。它表明那个

14、函数将从一个命令用户接口(例如一个菜单项或 toolbar 按钮)处理一个命令消息。当一个命令对象通过指定的 ID 接受到一个 Windows WM_COMMAND 消息时,ON_COMMAND 将调用成员函数memberFxn 处理此消息。在用户的消息映射中,对于每个菜单或加速器命令(必须被映射到一个消息处理函数)应该确实有一个ON_COMMAND 宏语句。ON_CONTROLON_CONTROL(wNotifyCode,id,memberFxn说明:表明哪个函数将处理一个常规控制表示消息。控制标识消息是那些从一个控制夫发送到母窗口的消息。ON_MESSAGEON_MESSAGE(messa

15、ge,memberFxn说明:指明哪个函数将处理一用户定义消息。用户定义消息通常定义在WM_USER到 0x7FF 范围内。用户定义消息是那些不是标准Windows WM_MESSAGE 消息的任何消息。在用户的消息映射中,每个必须被映射到一个消息处理函数。用户定义消息应该有一个 ON_MESSAGE 宏语句。 ON_REGISTERED_MESSAGEON_REGISTERED_MESSAGE(nmessageVarible,memberFxn说明: Windows 的RegisterWindowsMesage函数用于定义一个新窗口消息,此消息保证在整个系统中是唯一的。此宏表明哪个函数处理已

16、注册消息。变量nMessageViable 应以 NEAR修饰 符来定义。 ON_UPDATE_COMMAND_UION_UPDATE_COMMAND_UI(id,memberFxn 说明: 此宏通常通过 ClassWizard被插入一个消息映射,以指明哪个函数将处理一个用户接口个更改命令消息。在用户的消息映射中,每个用户接口更改命令(比讯被映射到一个消息处理函数)应该有一个 ON_UPDATE_COMMAND_UI宏语句。 ON_VBXEVENTON_VBXEVENT(wNotifyCode,memberFxn 说明: 此宏通常通过 ClassWizard 被插入一个消息映射,以指明哪个函数

17、将处理一个来自 VBX 控制的消息。在用户的消息映射中每个被映射到一消息处理函数的 VBX 控制消息应该有一个 宏语句。RUNTIME_CLASS RUNTIME_CLASS(class_name 说明: 使用此宏从 c+类民众获取运行时类结构。 RUNTIME_CLASS 为由 class_name指定的类返 回 一 个 指 针到 CRuntimeClass 结 构 。 只 有 以DECLARE_DYNAMIC,DECLARE_DYNCREATE或 DECLARE_SERIAL 定义的CObject 派生类才返回到一个CRuntimeClass 结构的指针。 THROWTHROW(excep

18、tion_object_pointer 说明: 派出指定的异常。 THROW 中断程序的运行,把控制传递给用户程序中的相关的CATCH块。 如果用户没有提供CATCH块,那么控制被传递到一个MFC模块,他打印出一个错误并终止运行。THROW_LAST THROW_LAST(说明: 此宏允许用户派出一个局部建立的异常。如果用户试图排除一个刚发现的异常,那么一般此异常将溢出并被删除。使用THROW_LAST, 此异常被直接传送到下一个CATCH 处理程序。 TRACETRACE(exp 说明: 把一个格式化字符串送到转储设备,例如,文件或调试监视器,而提供与 printf 相似的 功能。同 MS_

19、DOS 下 C 程序的 printf 一样, TRACE 宏是一个在程序运行时跟踪变量值的方便形式。在 DEBUG 环境中, TRACE 宏输出到 afxDump。在 Release版中他不做任何工作。 注释: 此宏只在 MFC 的 DEBUG版中有效。 TRACE0 TRACE0(exp 说明: 与 TRACE 相似,但他把跟踪字符串放在代码段中,而不是 DGROUP,因此使用少的 DGROUP 空 间 。 TRACE0 是 一 组跟踪宏的一个变体,这些宏可用于调试输出。这一组包括 TRACE0,TRACE1,TRACE2 和 TRACE3, 这些宏不同在于所取参数的数目不同。 TRACE0 只取一个格 式化字符串并可用于简单文本消息。 TRACE1 取一格式化字符串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论