WEB开发网
开发学院软件开发VC FMD开发文集 -- MFC CObject浅析 阅读

FMD开发文集 -- MFC CObject浅析

 2010-03-28 20:34:52 来源:WEB开发网   
核心提示:五.DYNCREATE支持类的实例动态生成支持方法:添加声明:DECLARE_DYNCREATE( class_name )添加实现:IMPLEMENT_DYNCREATE( class_name, base_class_name )原码分析:DECLARE_DYNCREATE( class_name )#define

五.DYNCREATE支持

类的实例动态生成支持

方法:

添加声明:DECLARE_DYNCREATE( class_name )

添加实现:IMPLEMENT_DYNCREATE( class_name, base_class_name )

原码分析:

DECLARE_DYNCREATE( class_name )#define DECLARE_DYNCREATE(class_name)
//具有DYNAMIC支持
DECLARE_DYNAMIC(class_name)
//对象建立支持
static CObject* PASCAL CreateObject();
IMPLEMENT_DYNCREATE(class_name, base_class_name):#define IMPLEMENT_DYNCREATE(class_name, base_class_name)
//动态建立对象
CObject* PASCAL class_name::CreateObject()
{ return new class_name; }
//填写运行时类信息,与DYNAMIC不同的是,有pfnNew参数
IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF,
class_name::CreateObject)
六.SERIAL支持

将对象储存,以及读取建立对象支持

方法:

添加声明:DECLARE_SERIAL( class_name )

添加实现:IMPLEMENT_SERIAL( class_name, base_class_name, wSchema )

原码分析

DECLARE_SERIAL( class_name ):#define DECLARE_SERIAL(class_name)
//动态生成支持
_DECLARE_DYNCREATE(class_name)
//文档操作符
AFX_API friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb);
IMPLEMENT_SERIAL(class_name, base_class_name, wSchema):#define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema)
//动态生成支持
CObject* PASCAL class_name::CreateObject()
{ return new class_name; }
//填写运行时类信息,包括版本号,生成函数指针
_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema,
class_name::CreateObject)
AFX_CLASSINIT _init_##class_name(RUNTIME_CLASS(class_name));
//文档支持实现
CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb)
{ pOb = (class_name*) ar.ReadObject(RUNTIME_CLASS(class_name));
return ar; }
在派生类中重载virtual void Serialize(CArchive& ar);以实现类数据的保存及建立后读入。 从而实现类的保存,及读入动态建立。

上一页  1 2 3 

Tags:FMD 开发 文集

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