MFC 动态创建机制
2023-12-25 06:17:46
目录
动态创建机制概述
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(对象加工厂函数)
- 获取静态变量的第四个成员(新增加静态函数),并调用之。
- 新增加的静态函数内部,完成类对象的创建,并返回对象地址。
?
文章来源:https://blog.csdn.net/qq_61553520/article/details/135175165
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!