关于MFC的动态创建,该如何解决

关于MFC的动态创建
CRuntimeClass链表是怎么形成的,怎么通过IMPLEMENT_DYNCREATE宏的跟踪没有看到链表的形成呢

------解决方案--------------------
http://blog.****.net/hyhnoproblem/article/details/6314769
------解决方案--------------------
// not serializable, but dynamically constructable
#define DECLARE_DYNCREATE(class_name) \
DECLARE_DYNAMIC(class_name) \
static CObject* PASCAL CreateObject();
调用
DECLARE_DYNAMIC宏,看这个宏的定义:
static AFX_DATA CRuntimeClass class##class_name; \
virtual CRuntimeClass* GetRuntimeClass() const; \
注意这你的class##class_name对象是个静态的CRuntimeClass类对象

-----------------------------
#define IMPLEMENT_DYNCREATE(class_name, base_class_name) \
CObject* PASCAL class_name::CreateObject() \
{ return new class_name; } \
IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, \
class_name::CreateObject)

看下IMPLEMENT_RUNTIMECLASS宏,看这个宏的定义
#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
CRuntimeClass* PASCAL class_name::_GetBaseClass() \
{ return RUNTIME_CLASS(base_class_name); } \
AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
#class_name, sizeof(class class_name), wSchema, pfnNew, \
&class_name::_GetBaseClass, NULL }; \
CRuntimeClass* class_name::GetRuntimeClass() const \
{ return RUNTIME_CLASS(class_name); } \
看到这个CRuntimeClass* PASCAL class_name::_GetBaseClass() \
{ return RUNTIME_CLASS(base_class_name); } 
_GetBaseClass()的定义,调用RUNTIME_CLASS(base_class_name);宏,这个宏的定义
#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))
上面说过了class##class_name是个静态对象。最后你在看看CRuntimeClass结构体的定义,看他定义的成员变量。
这样就将自己加入类型录中了。
你可以这样理解,子类连接到父类,父类连接到他的父类(相对于子类来说是爷爷),然后爷爷连接到他的父类,...这样一直到最顶的基类CObject类。