手写MFC----第一节DECLARE_DYNCREATE(mydoc)

原创 2004年07月11日 21:39:00

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();

定义了三个内容,都是公有的成员,一个静态结构,两个函数。
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

DECLARE_DYNCREATE(mydoc)定义为#define DECLARE_DYNCREATE(class_name) /         DECLARE_DYNAMIC(class_nam...
  • zhaoping598
  • zhaoping598
  • 2008年02月16日 12:14
  • 290

手写MFC---- 第二节 IMPLEMENT_DYNCREATE (mydoc,CDocument)

还是先看定义#define IMPLEMENT_DYNCREATE(class_name, base_class_name) /         CObject* PASCAL class_name:...
  • xingshuqiang2009
  • xingshuqiang2009
  • 2011年01月24日 21:58
  • 213

手写MFC---- 第二节 IMPLEMENT_DYNCREATE (mydoc,CDocument)

还是先看定义 #define IMPLEMENT_DYNCREATE(class_name, base_class_name) /          CObject* PASCAL class...
  • zhoujiamurong
  • zhoujiamurong
  • 2004年07月11日 21:41
  • 3357

DECLARE_DYNAMIC 和 DECLARE_DYNCREATE

这些类只要DECLARE_DYNAMIC: CObject CCmdTarget CWinThread CWinApp CMyWinApp CView CDocument 而这...
  • wishfly
  • wishfly
  • 2013年03月19日 14:39
  • 1549

手写MFC----第四讲 BEGIN_MESSAGE_MAP

首先看定义#define BEGIN_MESSAGE_MAP(theClass, baseClass) /         const AFX_MSGMAP* theClass::GetMessage...
  • xingshuqiang2009
  • xingshuqiang2009
  • 2011年01月24日 22:00
  • 166

DECLARE_DYNCREATE(class_name)的具体作用

DECLARE_DYNCREATE(class_name)的具体作用 首先还是看msdn的解释和这个语句的定义: msdn的解释: 启用 CObject对象 --将动态创建的派生类在运行时。 ...
  • panker2008
  • panker2008
  • 2015年05月12日 14:27
  • 706

Visual C++ MFC 中常用宏的含义 DECLARE_DYNCREATE 和 ?

比如说,Class *pClass = new Class需要动态创建的时候使用 比如 class CPerson : public CObject { DECLARE_DYNAMIC( CPerso...
  • zmq5411
  • zmq5411
  • 2011年02月15日 10:30
  • 1058

DECLARE_DYNCREATE(DECLARE_DYNAMIC)与IMPLEMENT_DYNCREATE(IMPLEMENT_DYNAMIC)解析

随便搜索一下,发现给出的解释是在运行期让派生类支持动态创建,可是给出详细解释的却很少,那么下面仔细看看此宏的扩展: #define DECLARE_DYNCREATE(class_name) \ ...
  • waxgourd0
  • waxgourd0
  • 2012年12月03日 11:39
  • 3997

RUNTIME_CLASS(xx)->CreateObject()错误Error: Trying to create object which is not DECLARE_DYNCREATE

首先:在头文件中修修改如下 DECLARE_DYNCREATE(你的类名) 在cpp实现中,修改如下 IMPLEMENT_DYNCREATE...
  • brucezcg
  • brucezcg
  • 2016年03月11日 10:40
  • 582

手写MFC----第四讲 BEGIN_MESSAGE_MAP

首先看定义 #define BEGIN_MESSAGE_MAP(theClass, baseClass) /          const AFX_MSGMAP* theClass::GetM...
  • zhoujiamurong
  • zhoujiamurong
  • 2004年07月11日 21:45
  • 11264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手写MFC----第一节DECLARE_DYNCREATE(mydoc)
举报原因:
原因补充:

(最多只允许输入30个字)