现在的位置: 首页 > 综合 > 正文

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

2013年06月21日 ⁄ 综合 ⁄ 共 1838字 ⁄ 字号 评论关闭

还是先看定义

#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)); } /

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

抱歉!评论已关闭.