MFC宏定义(转载 出处不详)

很不错的一篇文章,不少不明白的地方在此讲的很清楚,很完整,主要是MFC的宏定义了.站长黑森林推荐!c++

 

AND_CATCHAND_CATCH 框架

 

AND_CATCH(exception_class,exception _object_point_name) 函数

 

说明: 工具

 

定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以得到一个异常类型,而后使用AND_CATCH宏得到随后的异常处理代码能够访问异常对象(若合适的话)已获得关于异常的特别缘由的更多消息。在AND_CATCH块中调用THROW_LAST宏以便把处理过程移到下个外部异常框架。AND_CATCH可标记CATCH或AND_CATCH块的末尾。 指针

 

注释: 调试

 

AND_CATCH块被定义成为一个C++做用域(由花括号来描述)。若用户在此做用域定义变量,那么记住他们只在此做用域中能够访问。他也用于exception_object_pointer_name变量。 对象

 

ASSERT 接口

 

ASSERT(booleanExpression) 内存

 

说明: 资源

 

计算变量的值。若是结构的值为0,那么此宏便打印一个诊断消息而且成讯运行失败。若是条件为非0,那么什么也不作。 诊断消息的形式为: assertion failed in file in line 其中name是元文件名,num是源文件中运行失败的中断号。 在Release版中,ASSERT不计算表达式的值也就不中断程序。若是必须计算此表达式的值且无论环境如何那么用VERIFY代替ASSERT。 

 

注释: 

 

ASSERT只能在Debug版中用 

 

ASSERT_VAILD 

 

ASSERT_VAILD(pObject) 

 

说明: 

 

用于检测关于对象的内部状态的有效性。ASSERT_VALID调用此对象的AssertValid成员函数(把它们做为本身的变量来传递)。在Release版中ASSERT_VALID什么也不作。在DEBUG版中,他检查指针,以不一样于NULL的方式进行检查,并调用对象本身的AssertValid成员函数。若是这些检测中有任何一个失败的话,那么他会以与ASSERT相同的方法显示一个警告的消息。 

 

注释: 

 

此函数只在DEBUG版中有效。 

 

BEGIN_MESSAGE_MAP 

 

BEGIN_MESSAGE_MAP(the class,baseclass) 

 

说明: 

 

使用BEGIN_MESSAGE_MAP开始用户消息映射的定义。在定义用户类函数的工具(.cpp)文件中,以BEGIN_MESSAGE_MAP宏开始消息映射,而后为每一个消息处理函数增长宏项,接着以END_MESSAGE_MAP宏完成消息映射。 

 

CATCH 

 

CATCH(exception_class,exception_object_pointer_name) 

 

说明: 

 

使用此用定义一个代码块,此代码用来获取当前TRY块中都一个异常类型。异常处理代码能够访问异常对象,如何合适的话,就会获得关于异常的特殊缘由的更多消息。调用THROW_LAST宏以把处理过程一下一个外部异常框架,若是exception-class是类CExceptioon,那么会获取全部异常类型。用户可使用CObject::IsKindOf成员函数以肯定那个特别异常被排除。一种获取异常的最好方式是使用顺序的AND_CATCH语句,每一个带一个不一样的异常类型。此异常类型的指针由宏定义,用户没必要定义。 

 

注释: 

 

此CATCH块被定义做一个C++范围(由花括号描述)。如用户在此范围定义变量,那么它们只在吃范围内能够访问。他还能够用于异常对象的指针名。 

 

DEBUG_NEW 

 

#define new DEBUG_NEW 

 

说明: 

 

帮助查找内存错误。用户在程序中使用DEBUG_NEW,用户一般使用new运算符来从堆上分配。在Debug模式下(但定义了一个DEBUG符号),DEBUG_NEW为它分配的每一个对象记录文件名和行号。而后,在用户使用CMemoryState::DumpAllObjectSince成员函数时,每一个以DEBUG_NEW分配的对象分配的地方显示出文件名和行号。 为了使用DEBUG_NEW,应在用户的资源文件中插入如下指令: #define new DEBUG_NEW 一旦用户插入本指令,预处理程序将在使用new的地方插入DEBUG_NEW,而MFC做其他的工做。但用户编译本身的程序的一个发行版时,DEBUG_NEW便进行简单的new操做,并且不产生文件名和行号消息。 

 

DECLARE_DYNAMIC 

 

DECLARE_DYNAMIC(class_name) 

 

说明: 

 

但从CObject派生一个类时,此宏增长关于一个对象类的访问运行时间功能。把DECLARE_DYNAMIC宏加入类的头文件中,而后在所有须要访问词类对象的.CPP文件中都包含此模块。若是像所描述那样使用DELCARE_DYNAMIC和IMPLEMENT_DYNAMIC宏,那么用户即可使用RUNTIME_CLASS宏和CObject::IsKindOf函数以在运行时间决定对象类。若是DECLARE_DYNAMIC包含在类定义中,那么IMPLEMETN_DYNAMIC必须包含在类工具中。 

 

DECLARE_DYNCREATE 

 

DECLARE_DYNCREATE(class_name) 

 

说明: 

 

使用DECLARE_DYNCRETE宏以便容许CObject派生类的对象在运行时刻自动创建。主机使用此功能自动创建新对象,例如,但它在串行化过程当中从磁盘读一个对象时,文件及视图和框架窗应该支持动态创建,由于框架须要自动创建它。把DECLARE_DYNCREATE宏加入类的.H文件中,而后在所有须要访问此类对象的.CPP文件中包含这一模式。若是DECLARE_DYNCREATE包含在类定义中,那么IMPLEMENT_DYNCREATE必须包含在类工具中。 

 

DECLARE_MESSAGE_MAP 

 

DECLARE_MESSAGE_MAP() 

 

说明: 

 

用户程序中的每一个CCmdTarget派生类必须提供消息映射以处理消息。在类定义的末尾使用DECLARE_MESSAGE_MAP宏。接着,在定义类成员函数的.CPP文件中,使用BEGIN_MESSAGE_MAP宏,每一个用户消息处理函数的宏项下面的列表以及END_MESSAGE_MAP宏。 

 

注释: 

 

若是在DECLARE_MESSAGE_MAP以后定义任何一个成员,那么必须为他们指定一个新存取类型(公共的,私有的,保护的)。 

 

DECLARE_SERIAL 

 

DECLARE_SERIAL(class_name) 

 

说明: 

 

DECLARE_SERIAL为一个能够串行化的CObject派生类产生必要的C++标题代码。串行化是把某个对象的内容从一个文件读出和写入一文件。在.H文件中使用DECLARE_SERIAL宏,接着在须要访问此类对象的所有.CPP文件中包含此文件。若是DECLARE_SERIAL包含在类定义中,那么IMPLEMENT_SERIAL必须包含在类工具中。DECLARE_SERIAL宏包含所有DECLARE_DYNAMIC,IMPLEMENT_DYCREATE的功能。

 

END_CATCH 

 

END_CATCH 

 

说明: 

 

标识最后的CATCH或AND_CATCH块的末尾。 

 

END_MESSAGE_MAP 

 

END_MESSAGE_MAP 

 

说明: 

 

使用END_MESSAGE_MAP宏结束用户的消息映射定义 

 

IMPLEMENT_DYNAMIC 

 

IMPLEMENT_DYNAMIC(class_name,base_class_name) 

 

说明: 

 

经过运行时在串行结构中为动态CObject派生类访问类名和位置来产生必要的C++代码。在.CPP文件中使用IMPLEMENT_DYNAMIC宏,接着一次连接结果对象代码 

 

IMPLEMENT_DYNCREATE 

 

IMPLEMENT_DYNCREATE(class_name,base_class_name) 

 

说明: 

 

经过DECLARE_DYNCREATE宏来使用IMPLEMENT_DYNCREATE宏,以容许CObject派生类对象在运行时自动创建。主机使用此功能自动创建对象,例如,但它在串行化过程当中从磁盘读去一个对象时,他在类工具里加入IMPLEMENT_DYNCREATE宏。若用户使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏,那么接着使用RUNTIME_CLASS宏和CObject::IsKindOf成员函数以在运行时肯定对象类。若declare_dyncreate包含在定义中,那么IMPLEMENT_DYNCREATE必须包含在类工具中。 

 

IMPLEMENT_SERIAL 

 

IMPLEMENT_SERIAL(class_name,base_class_name,wSchema) 

 

说明: 

 

经过运行时在串行结构中动态CObject派生类访问类名和位置来创建必要的C++代码。在.CPP文件中使用IMPLEMENT_SERIAL宏,而后一次连接结果对象代码。 

 

ON_COMMAND 

 

ON_COMMAND(id,memberFxn) 

 

说明: 

 

此宏经过ClassWizard或手工插入一个消息映射。它代表那个函数将从一个命令用户接口(例如一个菜单项或toolbar按钮)处理一个命令消息。当一个命令对象经过指定的ID接受到一个Windows WM_COMMAND消息时,ON_COMMAND将调用成员函数memberFxn处理此消息。在用户的消息映射中,对于每一个菜单或加速器命令(必须被映射到一个消息处理函数)应该确实有一个ON_COMMAND宏语句。 

 

ON_CONTROL 

 

ON_CONTROL(wNotifyCode,id,memberFxn) 

 

说明: 

 

代表哪一个函数将处理一个常规控制表示消息。控制标识消息是那些从一个控制夫发送到母窗口的消息。 

 

ON_MESSAGE 

 

ON_MESSAGE(message,memberFxn) 

 

说明: 

 

指明哪一个函数将处理一用户定义消息。用户定义消息一般定义在WM_USER到0x7FF范围内。用户定义消息是那些不是标准Windows WM_MESSAGE消息的任何消息。在用户的消息映射中,每一个必须被映射到一个消息处理函数。用户定义消息应该有一个ON_MESSAGE宏语句。 

 

ON_REGISTERED_MESSAGE 

 

ON_REGISTERED_MESSAGE(nmessageVarible,memberFxn) 

 

说明: 

 

Windows的RegisterWindowsMesage函数用于定义一个新窗口消息,此消息保证在整个系统中是惟一的。此宏代表哪一个函数处理已注册消息。变量nMessageViable应以NEAR修饰符来定义。 

 

ON_UPDATE_COMMAND_UI 

 

ON_UPDATE_COMMAND_UI(id,memberFxn) 

 

说明: 

 

此宏一般经过ClassWizard被插入一个消息映射,以指明哪一个函数将处理一个用户接口个更改命令消息。在用户的消息映射中,每一个用户接口更改命令(比讯被映射到一个消息处理函数)应该有一个ON_UPDATE_COMMAND_UI宏语句。 

 

ON_VBXEVENT 

 

ON_VBXEVENT(wNotifyCode,memberFxn) 

 

说明: 

 

此宏一般经过ClassWizard被插入一个消息映射,以指明哪一个函数将处理一个来自VBX控制的消息。在用户的消息映射中每一个被映射到一消息处理函数的VBX控制消息应该有一个宏语句。 

 

RUNTIME_CLASS 

 

RUNTIME_CLASS(class_name) 

 

说明: 

 

使用此宏从c++类民众获取运行时类结构。RUNTIME_CLASS为由class_name指定的类返回一个指针到CRuntimeClass结构。只有以DECLARE_DYNAMIC,DECLARE_DYNCREATE或DECLARE_SERIAL定义的CObject派生类才返回到一个CRuntimeClass结构的指针。 

 

THROW 

 

THROW(exception_object_pointer) 

 

说明: 

 

派出指定的异常。THROW中断程序的运行,把控制传递给用户程序中的相关的CATCH块。若是用户没有提供CATCH块,那么控制被传递到一个MFC模块,他打印出一个错误并终止运行。 

 

THROW_LAST 

 

THROW_LAST() 

 

说明: 

 

此宏容许用户派出一个局部创建的异常。若是用户试图排除一个刚发现的异常,那么通常此异常将溢出并被删除。使用THROW_LAST,此异常被直接传送到下一个CATCH处理程序。 

 

TRACE 

 

TRACE(exp) 

 

说明: 

 

把一个格式化字符串送到转储设备,例如,文件或调试监视器,而提供与printf类似的功能。同MS_DOS下C程序的printf同样,TRACE宏是一个在程序运行时跟踪变量值的方便形式。在DEBUG环境中,TRACE宏输出到afxDump。在Release版中他不作任何工做。 

 

注释: 

 

此宏只在MFC的DEBUG版中有效。 

 

TRACE0 

 

TRACE0(exp) 

 

说明: 

 

与TRACE类似,但他把跟踪字符串放在代码段中,而不是DGROUP,所以使用少的DGROUP空间。TRACE0是一组跟踪宏的一个变体,这些宏可用于调试输出。这一组包括TRACE0,TRACE1,TRACE2和TRACE3,这些宏不一样在于所取参数的数目不一样。TRACE0只取一个格式化字符串并可用于简单文本消息。TRACE1取一格式化字符串加上一个变量——一个将转储的变量。一样,TRACE2,TRACE3分别取2个或3个参数(在格式化字符串以后)。若是用户以便以了应用程序的发行版,那么它只把数据转储到afxDump。 

 

注释: 

 

此宏只在MFC的DEBUG中有效。 

 

TRACE1 

 

TRACE1(exp,param1) 

 

说明: 

 

参见TRACE0 

 

TRACE2 

 

TRACE2(exp,param1,param2) 

 

说明: 

 

参见TRACE0 

 

TRACE3 

 

TRACE3(exp,param1,param2,param3) 

 

说明: 

 

TRY 

 

TRY 

 

说明: 

 

使用此宏创建一TRY块。一个TRY识别一个可排除异常的代码块。这些异常在随后的CATCH和AND_CATCH块处理。传递是容许的:异常能够传递一个外部TRY块,或者忽略它们或者使用THROW_LAST宏。 

 

VERIFY 

 

VERIFY(booleanExpression) 

 

说明: 

 

在MFC的DEBUG版中,VERIFY宏计算它的变量值。 若是结果为0,那么宏打印一个诊断消息并停止程序。若是条件不为0,那么什么工做也不做。 诊断有以下形式: assertion failed in file in line 其中name是源文件的名字,num是在源文件中失败的停止行号。在MFC的Release版中,VERIFY计算表达式值但不打印或停止程序。例如:若是表达式是个函数调用,那么调用成功。

相关文章
相关标签/搜索