友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第43章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                     { 

                            return &CObject::classCObject; 

                     } 



                   并且,CRuntimeClass 中的static 成员变量应该要初始化(如果你忘记了,赶快复习第 



                    2章的「静态成员(变量与函数)」一节): 



                    // in implementation file 

                    CRuntimeClass* CRuntimeClass::pFirstClass = NULL; 



                     终于,整个「类别型录」串行的头部就这样形成了: 



                                                         CObject::classCObject 



                                                               “CObject” 



                                                            sizeof(CObject) 



                           CRuntimeClass::pFirstClass           0xFFFF 



                             (static  

                                  变量)                      m_pfnCreateObject       NULL 



                                                             m_pBaseClass          NULL 



                                                             m_pNextClass 



                                                                                           NULL 



128 


…………………………………………………………Page 191……………………………………………………………

                                                      第3章    MFC 六大關鍵技術之模擬 



范例程序Frame3 在。h 档中有这些类别声明: 



 CObject 

  CObject 



     CCmdTarget 

     CCmdTarget 



        CWinThread 

         CWinThread 



            CWinApp 

             CWinApp 



                CMyWinApp 

                CMyWinApp 



        CWnd 

         CWnd 



            CView 



                CMyView 

                CMyView 



            CFrameWnd 

             CFrameWnd 



                CMyFrameWnd 

                CMyFrameWnd 



        CDocument 

         CDocument 



            CMyDoc 

             CMyDoc 



class CObject 

{ 

。。。 

}; 

class CCmdTarget : public CObject 

{ 

      DECLARE_DYNAMIC(CCmdTarget) 

。。。 

}; 

class CWinThread : public CCmdTarget 

{ 

      DECLARE_DYNAMIC(CWinThread) 

。。。 

}; 

class CWinApp : public CWinThread 

{ 

      DECLARE_DYNAMIC(CWinApp) 

。。。 

}; 

class CDocument : public CCmdTarget 

{ 

      DECLARE_DYNAMIC(CDocument) 



                                                                                           129 


…………………………………………………………Page 192……………………………………………………………

                  第篇  勿在浮砂築高台 



                  。。。 

                  }; 

                  class CWnd : public CCmdTarget 

                  { 

                        DECLARE_DYNAMIC(CWnd)   

                                               // 其实在MFC 中是DECLARE_DYNCREATE(),见下节。 

                  。。。 

                  }; 

                  class CFrameWnd : public CWnd 

                  { 

                                                  // 其实在MFC 中是DECLARE_DYNCREATE(),见下节。 

                       DECLARE_DYNAMIC(CFrameWnd)  

                  。。。 

                  }; 

                  class CView : public CWnd 

                  { 

                        DECLARE_DYNAMIC(CView) 

                  。。。 

                  }; 

                  class CMyWinApp : public CWinApp 

                  { 

                  。。。 

                  }; 

                  class CMyFrameWnd : public CFrameWnd 

                  { 

                    。。。 // 其实在MFC 应用程序中这里也有DECLARE_DYNCREATE(),见下节。 

                  }; 

                  class CMyDoc : public CDocument 

                  { 

                    。。。 // 其实在MFC 应用程序中这里也有DECLARE_DYNCREATE(),见下节。 

                  }; 

                  class CMyView : public CView 

                  { 

                    。。。 // 其实在MFC 应用程序中这里也有DECLARE_DYNCREATE(),见下节。 

                  }; 



                  范例程序Frame3 在。cpp 档中有这些动作: 



                  IMPLEMENT_DYNAMIC(CCmdTarget; CObject) 



                  IMPLEMENT_DYNAMIC(CWinThread; CCmdTarget) 



                  IMPLEMENT_DYNAMIC(CWinApp; CWinThread) 



                  IMPLEMENT_DYNAMIC(CWnd; CCmdTarget) // 其实在MFC 中它是IMPLEMENT_DYNCREATE(),见下节。 



                  IMPLEMENT_DYNAMIC(CFrameWnd; CWnd) // 其实在MFC 中它是IMPLEMENT_DYNCREATE(),见下节。 



                  IMPLEMENT_DYNAMIC(CDocument; CCmdTarget) 



                  IMPLEMENT_DYNAMIC(CView; CWnd) 



                  于是组织出图3…1 这样一个大网。 



130 


…………………………………………………………Page 193……………………………………………………………

                                                            第3章    MFC 六大關鍵技術之模擬 



       CObject::classCObject    CCmdTarget::classCCmdTarget      CWinThread::classCWinThread 



            “CObject”                    “CCmdTarget”                  “CWinThread” 



          m_pBaseClass                   m_pBaseClass                  m_pBaseClass 

          m_pNextClass                   m_pNextClass                  m_pNextClass 



                         NULL 

   NULL 



     CFrameWnd::classCFrameWnd        CWnd::classCWnd              CWinApp::classCWinApp 



          “CFrameWnd”                       “CWnd”                       “CWinApp” 



          m_pBaseClass                   m_pBaseClass                  m_pBaseClass 

          m_pNextClass                   m_pNextClass                  m_pNextClass 



       CDocument::classCDocument      CView::classCView 



           “CDocument”                     “CView” 



                                                                     (static 变量) 



                                                                     CRuntimeClass::pFirstClass 



          m_pBaseClass                   m_pBaseClass 

          m_pNextClass                   m_pNextClass 



    图3…1 CRuntimeClass 对象构成的类别型录网。本图只列出与RTTI 有关系 



           的成员。 



为了实证整个类别型录网的存在,我在main  函数中调用PrintAllClasses ,把串行中的每 



一个元素的类别名称、对象大小、以及schema no。 印出来: 



  void PrintAllClasses() 

  { 

      CRuntimeClass* pClass; 



      // just walk through the simple list of registered classes 

      for (pClass = CRuntimeClass::pFirstClass; pClass != NULL; 

              pClass = pClass…》m_pNextClass) 

      { 

          cout m_lpszClassName 
返回目录 上一页 下一页 回到顶部 0 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!