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

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

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




#0046  { 

#0047    return TRUE; 

#0048  } 

#0049 

#0050  IMPLEMENT_DYNAMIC(CCmdTarget; CObject) 

#0051  IMPLEMENT_DYNAMIC(CWinThread; CCmdTarget) 

#0052  IMPLEMENT_DYNAMIC(CWinApp; CWinThread) 

#0053  IMPLEMENT_DYNAMIC(CWnd; CCmdTarget) 

#0054  IMPLEMENT_DYNAMIC(CFrameWnd; CWnd) 

#0055  IMPLEMENT_DYNAMIC(CDocument; CCmdTarget) 

#0056  IMPLEMENT_DYNAMIC(CView; CWnd) 

#0057 

#0058  // global function 

#0059  CWinApp* AfxGetApp() 

#0060  { 

#0061    return theApp。m_pCurrentWinApp; 

#0062  } 



                                                                                 137 


…………………………………………………………Page 200……………………………………………………………

                    第篇  勿在浮砂築高台 



                    MY。H 



                    #0001  #include  

                    #0002  #include 〃mfc。h〃 

                    #0003 

                    #0004  class CMyWinApp : public CWinApp 

                    #0005  { 

                    #0006  public: 

                    #0007    CMyWinApp::CMyWinApp()   { 

                    #0008                                 } 

                    #0009    CMyWinApp::~CMyWinApp()  { 

                    #0010                                 } 

                    #0011 

                    #0012    virtual BOOL InitInstance(); 

                    #0013  }; 

                    #0014 

                    #0015  class CMyFrameWnd : public CFrameWnd 

                    #0016  { 

                    #0017  public: 

                    #0018    CMyFrameWnd(); 

                    #0019    ~CMyFrameWnd()  { 

                    #0020                       } 

                    #0021  }; 

                    #0022 

                    #0023 

                    #0024  class CMyDoc : public CDocument 

                    #0025  { 

                    #0026  public: 

                    #0027    CMyDoc::CMyDoc()  { 

                    #0028                         } 

                    #0029    CMyDoc::~CMyDoc() { 

                    #0030                         } 

                    #0031  }; 

                    #0032 

                    #0033  class CMyView : public CView 

                    #0034  { 

                    #0035  public: 

                    #0036    CMyView::CMyView()   { 

                    #0037                            } 

                    #0038    CMyView::~CMyView()  { 

                    #0039                            } 

                    #0040  }; 

                    #0041 

                    #0042  // global function 

                    #0043  void PrintAllClasses(); 



138 


…………………………………………………………Page 201……………………………………………………………

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



MY。CPP 



#0001  #include 〃my。h〃 

#0002 

#0003  CMyWinApp theApp; 

#0004 

#0005  BOOL CMyWinApp::InitInstance() 

#0006  { 

#0007      m_pMainWnd = new CMyFrameWnd; 

#0008      return TRUE; 

#0009  } 

#0010 

#0011  CMyFrameWnd::CMyFrameWnd() 

#0012  { 

#0013      Create(); 

#0014  } 

#0015 

#0016  void PrintAllClasses() 

#0017  { 

#0018      CRuntimeClass* pClass; 

#0019 

#0020      // just walk through the simple list of registered classes 

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

#0022              pClass = pClass…》m_pNextClass) 

#0023      { 

#0024          cout m_lpszClassName Run(); 

#0039 

#0040    PrintAllClasses(); 

#0041  } 



                                                                                    139 


…………………………………………………………Page 202……………………………………………………………

                   第篇  勿在浮砂築高台 



              IsKindOf       (型别辨识) 



                      有了图3…1 这张「类别型录」网,要实现IsKindOf  功能,再轻松不过了: 



                      1。 为CObject 加上一个IsKindOf  函数,于是此函数将被所有类别继承。它将把 



                        参数所指定的某个CRuntimeClass 对象拿来与类别型录中的元素一一比对。比 



                        对成功(在型录中有发现),就传回TRUE,否则传回FALSE : 



                       // in header file 

                       class CObject 

                       { 

                       public: 

                         。。。 

                         BOOL IsKindOf(const CRuntimeClass* pClass) const; 

                       }; 



                       // in implementation file 

                       BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const 

                       { 

                               CRuntimeClass* pClassThis = GetRuntimeClass(); 

                               while (pClassThis != NULL) 

                               { 

                                       if (pClassThis == pClass) 

                                               return TRUE; 

                                       pClassThis = pClassThis…》m_pBaseClass; 

                               } 

                               return FALSE;       // walked to the top; no match 

                       } 



                       注意,while 循环中所追踪的是「同宗」路线,也就是凭借着m_pBaseClass 而非 



                       m_pNextClass。假设我们的调用是: 



                             CView* pView = new CView; 



                             pView…》IsKindOf(RUNTIME_CLASS(CWinApp)); 



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