MFC 动态创建机制

目录

动态创建机制概述

代码测试分析

执行过程

总结


动态创建机制概述

MFC 动态创建机制是 MFC 中的一项重要功能,它允许开发者在运行时动态创建和管理窗口控件。通过动态创建机制,开发者可以根据需要在程序运行过程中创建、显示和销毁窗口,而不需要在设计时提前创建好所有的窗口控件。

如何使用动态创建机制?

  • 类必须派生自CObject
  • 类内必须添加声明宏DECLARE_DYNCREATE( theClass )
  • 类外必须添加实现宏瞭IMPLEMENT_DYCREATE(theClass, baseClass)
     

代码测试分析

MFC 动态创建机制_第1张图片

把宏展开

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);
}

MFC 动态创建机制_第2张图片

执行过程

获取CDog类结构体成员变量的地址,并调用CreateObject函数,这个不等同于类的成员函数,而是属于结构体的

MFC 动态创建机制_第3张图片

m_pfnCreateObject 是一个函数地址,是结构体CRuntimeClass的第四个属性 ,所以本质是调用的宏展开的CreateObject函数

MFC 动态创建机制_第4张图片

MFC 动态创建机制_第5张图片

返回值为CDog的对象

总结

  • 利用本类(CDog )的静态变量,调用CRuntimeClass的成员函数CreateObject(对象加工厂函数)
  • 获取静态变量的第四个成员(新增加静态函数),并调用之。
  • 新增加的静态函数内部,完成类对象的创建,并返回对象地址。
     

你可能感兴趣的:(MFC,mfc)