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: /
static
const AFX_DATA CRuntimeClass
class##class_name; /
virtual CRuntimeClass* GetRuntimeClass()
const; /
那么
DECLARE_DYNAMIC(mydoc) /
static CObject* PASCAL CreateObject();
等同于
public: /
static
const 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: /
static
const 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: /
static
const CRuntimeClass
classmydoc; /
virtual CRuntimeClass* GetRuntimeClass()
const; /
static CObject*
__stdcall
CreateObject();
定义了三个内容,都是公有的成员,一个静态结构,两个函数。