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

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

还是先看定义

#define IMPLEMENT_DYNCREATE(class_name, base_class_name) /

         CObject* PASCAL class_name::CreateObject() /

                  { return new class_name; } /

         IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, /

                  class_name::CreateObject)

那么IMPLEMENT_DYNCREATE (mydoc,Cdocument)等同于

CObject* PASCAL mydoc::CreateObject() /

                  { return new mydoc; } /

         IMPLEMENT_RUNTIMECLASS(mydoc, Cdocument, 0xFFFF, /

                  mydoc::CreateObject)

 

IMPLEMENT_RUNTIMECLASS又是什么东东呢?

#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) /

         AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { /

                  #class_name, sizeof(class class_name), wSchema, pfnNew, /

                            RUNTIME_CLASS(base_class_name), NULL }; /

         CRuntimeClass* class_name::GetRuntimeClass() const /

                  { return RUNTIME_CLASS(class_name); } /

 

那么IMPLEMENT_DYNCREATE (mydoc,CDocument)等同于

CObject* PASCAL mydoc::CreateObject() /

                  { return new mydoc; } /

AFX_COMDAT const AFX_DATADEF CRuntimeClass mydoc::class##mydoc = { /

                  #mydoc, sizeof(class mydoc), 0xFFFF, mydoc::CreateObject, /

                            RUNTIME_CLASS(CDocument), NULL }; /

         CRuntimeClass* mydoc::GetRuntimeClass() const /

                  { return RUNTIME_CLASS(mydoc); } /

加上

#define AFX_COMDAT

#define AFX_DATADEF

#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))

上面

 

 

那么IMPLEMENT_DYNCREATE (mydoc,CDocument)等同于

CObject* __stdcall mydoc::CreateObject() /

                  { return new mydoc; } /

const  CRuntimeClass mydoc::classmydoc = { /

                  #mydoc, sizeof(class mydoc), 0xFFFF, mydoc::CreateObject, /

                            (CRuntimeClass*)(& CDocument::classCDocument), NULL }; /

         CRuntimeClass* mydoc::GetRuntimeClass() const /

                  { return ((CRuntimeClass*)(& mydoc::class mydoc)); } /

好像还是不很明白,是吗?先看下一章吧

版权声明:本文为博主原创文章,未经博主允许不得转载。

手写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

34 虚函数与多态(一)

静态绑定与动态绑定静态绑定 绑定过程出现在编译阶段,在编译期就已确定要调用的函数。 动态绑定 绑定过程工作在程序运行时执行,在程序运行时才确定将要调用的函数。 只有通过基类指针或引用调用虚函数...
  • Leone9689
  • Leone9689
  • 2016年03月30日 11:26
  • 110

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

DECLARE_DYNCREATE(mydoc) 定义为 #define DECLARE_DYNCREATE(class_name) /          DECLARE_DYNAMIC(c...
  • zhoujiamurong
  • zhoujiamurong
  • 2004年07月11日 21:39
  • 5762

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

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

CDocument

  在"文档/视图"架构的MFC程序中,文档是一个CDocument派生对象,它负责存储应用程序的数据,并把这些信息提供给应用程序的其余部分。CDocument类对文档的建立及归档提供支持并提供了应用...
  • hczhiyue
  • hczhiyue
  • 2011年03月07日 11:25
  • 1383

IMPLEMENT_DYNCREATE的奇怪问题

 今天碰到一个很奇怪的问题,在VS2005下开发基于MFC程序的时候,如果将IMPLEMENT_DYNCREATE这个宏放在CPP文件的开头,居然运行时出现一堆错误,但是如果将这个宏放在CPP文件的末...
  • lights_joy
  • lights_joy
  • 2007年09月07日 19:50
  • 1771

DECLARE_DYNCREATE(DECLARE_DYNAMIC)与IMPLEMENT_DYNCREATE(IMPLEMENT_DYNAMIC)解析

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

IMPLEMENT_DYNCREATE宏定义

使用DECLARE——DYNCREATE宏时,使能Cobject派生类的对象在运行时动态被创建。 IMPLEMENT_DYNCREATE(class_name, base_class_nam...
  • chy19911123
  • chy19911123
  • 2015年11月19日 15:57
  • 1256

CView_VS_CDocument

CView与CDocument 这是面试的时候,考官问我的问题之一。具体问题忘记了。 最近看到一个人写的MFC的一些bolg,突然想起来这个问题了,就稍微总结一下,浅显之处,还请见谅。 第一点,...
  • chen825919148
  • chen825919148
  • 2012年09月08日 13:35
  • 877

手写MFC----第四讲 BEGIN_MESSAGE_MAP

首先看定义#define BEGIN_MESSAGE_MAP(theClass, baseClass) /         const AFX_MSGMAP* theClass::GetMessage...
  • xingshuqiang2009
  • xingshuqiang2009
  • 2011年01月24日 22:00
  • 166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手写MFC---- 第二节 IMPLEMENT_DYNCREATE (mydoc,CDocument)
举报原因:
原因补充:

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