目录
动态创建机制概述
代码测试分析
执行过程
总结
动态创建机制概述
MFC 动态创建机制是 MFC 中的一项重要功能,它允许开发者在运行时动态创建和管理窗口控件。通过动态创建机制,开发者可以根据需要在程序运行过程中创建、显示和销毁窗口,而不需要在设计时提前创建好所有的窗口控件。
如何使用动态创建机制?
- 类必须派生自CObject
- 类内必须添加声明宏DECLARE_DYNCREATE( theClass )
- 类外必须添加实现宏瞭IMPLEMENT_DYCREATE(theClass, baseClass)
代码测试分析
把宏展开
DECLARE_DYNCREATE( CDog )
展开为:
- 静态成员变量 CRuntimeClass 结构体
- 虚函数 GetRuntimeClass() 获取本类的结构体变量地址
- 静态函数 CReateObject()
public:static const CRuntimeClass classCDog;virtual CRuntimeClass* GetRuntimeClass() const;static CObject* PASCAL CreateObject();
IMPLEMENT_DYNCREATE( CDog, CAnimal )
展开为,CRuntimeClass 结构体的第四个属性有了值,是类成员函数 CreateObject() 函数地址
CObject* PASCAL CDog::CreateObject()
{return new CDog;
}
AFX_COMDAT const CRuntimeClass CDog::classCDog = {"CDog",sizeof(class CDog),0xFFFF,CDog::CreateObject,RUNTIME_CLASS(CAnimal),NULL,NULL
};
CRuntimeClass* CDog::GetRuntimeClass() const
{return RUNTIME_CLASS(CDog);
}
执行过程
获取CDog类结构体成员变量的地址,并调用CreateObject函数,这个不等同于类的成员函数,而是属于结构体的
m_pfnCreateObject 是一个函数地址,是结构体CRuntimeClass的第四个属性 ,所以本质是调用的宏展开的CreateObject函数
返回值为CDog的对象
总结
- 利用本类(CDog )的静态变量,调用CRuntimeClass的成员函数CreateObject(对象加工厂函数)
- 获取静态变量的第四个成员(新增加静态函数),并调用之。
- 新增加的静态函数内部,完成类对象的创建,并返回对象地址。