WEB开发网
开发学院软件开发VC MFC教程(3)-- CObject类 阅读

MFC教程(3)-- CObject类

 2010-03-25 20:33:52 来源:WEB开发网   
核心提示:成员变量class##class_name的内容IMPLEMENT_DYNCREATE等宏将初始化类的CRuntimeClass类型静态成员变量的各个域,表3-1列出了在动态类信息、动态创建、序列化这三个不同层次下对该静态成员变量的初始化情况:表3-1 静态成员变量class##class_name的初始化

成员变量class##class_name的内容

IMPLEMENT_DYNCREATE等宏将初始化类的CRuntimeClass类型静态成员变量的各个域,表3-1列出了在动态类信息、动态创建、序列化这三个不同层次下对该静态成员变量的初始化情况:

表3-1 静态成员变量class##class_name的初始化

CRuntimeClass成员变量

动态类信息

动态创建

序列化

m_lpszClassName

类名字符串

类名字符串

类名字符串

m_nObjectSize

类的大小(字节数)

类的大小(字节数)

类的大小(字节数)

m_wShema

0xFFFF

0xFFFF

1、2等,非0

m_pfnCreateObject

NULL

类的成员函数

CreateObject

类的成员函数

CreateObject

m_pBaseClass

基类的CRuntimeClass变量

基类的CRuntimeClass变量

基类的CRuntimeClass变量

m_pfnGetBaseClass

类的成员函数

_GetBaseClass

类的成员函数

_GetBaseClass

类的成员函数

_GetBaseClass

m_pNextClass

NULL

NULL

NULL

m_wSchema类型是UINT,定义了序列化中保存对象到文档的程序的版本。如果不要求支持序列化特性,该域为0XFFFF,否则,不能为0。

Cobject类本身的静态成员变量classCObject被初始化为:

{ "CObject", sizeof(CObject), 0xffff, NULL, &CObject::_GetBaseClass, NULL };

对初始化内容解释如下:

类名字符串是“CObject”,类的大小是sizeof(CObject),不要求支持序列化,不支持动态创建。

成员函数CreateObject

回顾3.2节,动态创建对象是通过语句pRuntimeClass->CreateObject完成的,即调用了CRuntimeClass自己的成员函数,CreateObject函数又调用m_pfnCreateObject指向的函数来完成动态创建任务,如下所示:

CObject* CRuntimeClass::CreateObject()

{

if (m_pfnCreateObject == NULL) //判断函数指针是否空

{

TRACE(_T("Error: Trying to create object which is not ")

_T("DECLARE_DYNCREATE or DECLARE_SERIAL: %hs. "),

m_lpszClassName);

return NULL;

}

//函数指针非空,继续处理

CObject* pObject = NULL;

TRY

{

pObject = (*m_pfnCreateObject)(); //动态创建对象

}

END_TRY

return pObject;

}

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:MFC 教程 CObject

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接