手写MFC----第一节DECLARE_DYNCREATE(mydoc)[转载]

本文详细解析了MFC中动态创建对象的过程,通过DECLARE_DYNCREATE宏的使用,介绍了其内部实现机制,包括DECLARE_DYNAMIC宏、CRuntimeClass结构及其实现的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DECLARE_DYNCREATE(mydoc)
定义为
#define DECLARE_DYNCREATE(class_name) /
         DECLARE_DYNAMIC(class_name) /
         static CObject* PASCAL CreateObject();
等同于
 DECLARE_DYNAMIC(mydoc) /
         static CObject* PASCAL CreateObject();
DECLARE_DYNAMIC又是什么呢?
定义为:
#define DECLARE_DYNAMIC(class_name) /
public: /
         staticconst AFX_DATA CRuntimeClass class##class_name; /
         virtual CRuntimeClass* GetRuntimeClass() const; /
 
那么
 
 
DECLARE_DYNAMIC(mydoc) /
         static CObject* PASCAL CreateObject();
等同于
public: /
         staticconst AFX_DATA CRuntimeClass class##mydoc; /
         virtual CRuntimeClass* GetRuntimeClass() const; /
static CObject* PASCAL CreateObject();
然后,再根据
#define PASCAL      __stdcall
#define AFX_CORE_DATA
#define AFX_DATA AFX_CORE_DATA
说明AFX_DATA啥也不是
## 为连接字符
等同于
public: /
         staticconst CRuntimeClass  classmydoc; /
         virtual CRuntimeClass* GetRuntimeClass() const; /
static CObject* __stdcall  CreateObject();
然后,再根据
struct CRuntimeClass
{
// Attributes
         LPCSTR m_lpszClassName;
         int m_nObjectSize;
         UINT m_wSchema; // schema number of the loaded class
         CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
#ifdef _AFXDLL
         CRuntimeClass* (PASCAL* m_pfnGetBaseClass)();
#else
         CRuntimeClass* m_pBaseClass;
#endif
 
// Operations
         CObject* CreateObject();
         BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
 
// Implementation
         void Store(CArchive& ar) const;
         static CRuntimeClass* PASCAL Load(CArchive& ar, UINT* pwSchemaNum);
 
         // CRuntimeClass objects linked together in simple list
         CRuntimeClass* m_pNextClass;       // linked list of registered classes
};
说明CruntimeClass是个结构
DECLARE_DYNCREATE(mydoc)
就等同于
public: /
         staticconst CRuntimeClass  classmydoc; /
         virtual CRuntimeClass* GetRuntimeClass() const; /
static CObject* __stdcall  CreateObject();
定义了三个内容,都是公有的成员,一个静态结构,两个函数。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值