MFC 动态创建机制

目录

动态创建机制概述

代码测试分析

执行过程

总结


动态创建机制概述

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(对象加工厂函数)
  • 获取静态变量的第四个成员(新增加静态函数),并调用之。
  • 新增加的静态函数内部,完成类对象的创建,并返回对象地址。
     

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dao-道法自然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值