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 DECLARE_DYNCREATE(class_name)
IMPLEMENT_DYNCREATE(class_name, base_class_name):
//具有DYNAMIC支持
DECLARE_DYNAMIC(class_name)
//对象建立支持
static CObject* PASCAL CreateObject();#define IMPLEMENT_DYNCREATE(class_name, base_class_name)
六.SERIAL支持
//动态建立对象
CObject* PASCAL class_name::CreateObject()
{ return new class_name; }
//填写运行时类信息,与DYNAMIC不同的是,有pfnNew参数
IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF,
class_name::CreateObject)
将对象储存,以及读取建立对象支持
方法:
添加声明:DECLARE_SERIAL( class_name )
添加实现:IMPLEMENT_SERIAL( class_name, base_class_name, wSchema )
原码分析
DECLARE_SERIAL( class_name ):#define DECLARE_SERIAL(class_name)
IMPLEMENT_SERIAL(class_name, base_class_name, wSchema):
//动态生成支持
_DECLARE_DYNCREATE(class_name)
//文档操作符
AFX_API friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb);#define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema)
在派生类中重载virtual void Serialize(CArchive& ar);以实现类数据的保存及建立后读入。 从而实现类的保存,及读入动态建立。
//动态生成支持
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; }
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››开发一个自己的HTML在线编辑器(一)
- ››开发一个自己的HTML在线编辑器(二)
- ››开发者在App Store上赚的钱比在Android Market上多...
- ››开发者应深入学习的10个Android开源应用项目
- ››开发移动 Web Ajax 应用
- ››开发者眼中的iPhone与Android
- ››开发者或想使用的10个Android2.2新特性
更多精彩
赞助商链接