1. MFC动态创建对象的实现:
1) 可以看到文档/视图结构中的三个类(App、View、Doc)都使用了动态创建类型的技术;
2) MFC实现动态对象创建只需要三步即可:
i. 从CObject派生类型;
ii. 在类声明部分使用DECLARE_DYNCREATE(类名)宏声明该类是一个可以动态创建的类型;
iii. 在类实现部分使用IMPLEMENT_DYNCREATE(类名, 基类名)来实现动态创建对象的具体功能;
!!可以看到在Wizzard生成的代码中,在构造函数声明之后使用DECLARE_DYNCREATE宏,在.cpp中的消息映射之前使用了IMPLEMENT_DYNCREATE宏;
3) DECLARE_DYNCREATE的原理:
i. 可以实现C++语法不允许的运行时创建类,例如:
CString strMyClass = _T("MyClass");
CMyClass *ptr = new strMyClass;
ii. 其底层展开实际上是声明了一个CRuntimeClass对象以及两个函数(GetRuntimeClass和CreateObject);
iii. CRuntimeClass对象用来保存宏参数中输入的自定义的类名;
iv. GetRuntimeClass以CRuntimeClass对象作为输入并动态创建和注册CRuntimeClass中保存的自定义类名;