八宝书库 > 文学其他电子书 > 深入浅出MFC第2版(PDF格式) >

第94部分

深入浅出MFC第2版(PDF格式)-第94部分

小说: 深入浅出MFC第2版(PDF格式) 字数: 每页4000字

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




    “CFrameWnd”       “CWnd”          “CWinApp” 

       12               4               4 



   m_pfnConstruct   m_pfnConstruct  m_pfnConstruct 



    m_pNextClass    m_pNextClass     m_pNextClass 



   CDocument::classCDocumentCView::classCView 

    “CDocument”       “CView” 

       4                4 



   m_pfnConstruct   m_pfnConstruct 

                                      CRuntimeClass::pFirstClass 



    m_pNextClass    m_pNextClass 



   CRuntimeClass Linked…list 

                                                                                                                         Document 



                        Frame                                            Document 



             CView* m_pViewActive;                           CDocTemplate* m_pDocTemplate;                               disk 

                                                             CString m_strPathName; 

                                                             CPtrList m_viewList; 



             GetActiveDocument() 

                                                             UpdateAllViews() 

 CView* pView = GetActiveView(); 

   return pView…》GetDocument(); 



                                                                            View 

                                                             CDocument* m_pDocument;                                                     View 



                       GetActiveView() 

                                                              OnUpdate() 

      return m_pViewActive; 

                                                              GetDocument() 



                                                                       return m_pDocument; 



                                                              GetParentFrame() 



图  8…2    CDocTemplate、CDocument、CView 、CFrameWnd 之间 的关系 



                                                                                                                                                               467 


…………………………………………………………Page 530……………………………………………………………

                     第篇    深入  MFC  程式設計 



                    我把Document/View/Frame  的观念以狂风骤雨之势对你做了一个交待。模糊?晦暗?没 



                    有关系,马上我们就开始实作Scribble Step1,你会从实作过程中慢慢体会上述观念。 



           Scribble Step1 的Document 数据结构设计 



                    Scribble 允许使用者在窗口中画图,画图的方式是以鼠标做为画笔,按下左键拖曳拉出 



                    线条。每次按下鼠标左键后一直到放开为止的连续坐标点构成线条(stroke )。整张图(整 



                    份文件)由线条构成,线条可由点、笔宽、笔色等等资料构成(但本例并无笔色资料)。 



                    MFC  的Collections Classes  中有许多适用于各种数据类型(如Byte、Word 、DWord 、Ptr ) 



                     以及各种数据结构(如数组、串行)的现成类别。如果我们尽可能把这些现成的类别应 



                    用到程序的数据结构上面,就可以节省许多开发时间: 



                                                             CObject 

                                                              CObject 



                             CArray (template)             CList (template)            CMap (template) 

                              CArray (template)            CList (template)            CMap (template) 



                                CByteArray                    CPtrList                 CMapWordToPtr 

                                 CByteArray                                             CMapWordToPtr 



                               CDWordArray                    CObList                  CMapPtrToWord 

                                CDWordArray                    CObList                  CMapPtrToWord 



                                 CObArray                    CStringList                CMapPtrToPtr 

                                 CObArray                     CStringList                CMapPtrToPtr 



                                 CPtrArray                Lists of user types          CMapWordToOb 

                                 CPtrArray                 Lists of user types          CMapWordToOb 



                                CStringArray                                           CMapStringToPtr 

                                CStringArray         Typed Template Collections        CMapStringToPtr 



                                CUIntArray                 CTypedPtrArray              CMapStringToOb 

                                 CUIntArray                CTypedPtrArray              CMapStringToOb 



                                CWordArray                  CTypedPtrList             CMapStringToString 

                                CWordArray                  CTypedPtrList             CMapStringToString 



                             Arrays of user types          CTypedPtrMap               Maps of user types 

                             Arrays of user types           CTypedPtrMap               Maps of user types 



                   我们的设计最高原则就是尽量使用MFC  已有的类别,提高软件IC  的重复使用性。上 



                    图浅色部份是Scribble 范例程序在16 位MFC  中采用的两个类别。深色部份是 



                   Scribble 范例程序在32 位MFC  中采用的两个类别。 



468 


…………………………………………………………Page 531……………………………………………………………

                                              第8章    Document…View  深入探討 



MFC Collection Classes 的选用 



     第5章末尾我曾经大致提过MFC Collection Classes 。它们分为三种类型,用来管理一大 



     群对象: 



      ■ Array :数组,有次序性(需依序处理),可动态增减大小,索引值为整数。 



      ■ List :双向串行,有次序性(需依序处理),无索引。串行有头尾,可从头尾 



          或从串行的任何位置安插元素,速度极快。 



      ■ Map :又称为Dictionary ,其内对象成对存在,一为键值对象(key object ), 



           一为实值对象(value object )。 



     下面是其特性整理: 



     类型  有序    索引          插入元素  搜寻特定元素   复制元素 



     List  Yes  No             快       慢           可 



     Array  Yes  Yes           慢       慢           可 



                (利用整数索引值) 



     Map  No    Yes            快       快          键值(key )不可复制, 

                (利用键值)                            实值(value )可复制。 



     MFC Collection classes 所收集的对象中,有两种特别需要说明,一是Ob 一是Ptr : 



      ■ Ob 表示衍生自CObject 的任何对象。MFC 提供CObList、CObArray 两种类别。 



      ■ Ptr 表示对象指针。MFC 提供CPtrList、CPtrArray 两种类别。 



     当我们考虑使用MFC collection classes 时,除了考虑上述三种类型的特性,还要考虑以 



     下几点: 



      ■是否使用C++ template  (对于type…safe 极有帮助)。 



      ■储存于collection class 之中的元素是否要做文件读写动作(Serialize)。 



      ■储存于collection class 之中的元素是否要有倾印(dump )和错误诊断能力。 



                                                                         469 


…………………………………………………………Page 532……………………………………………………………

                     第篇    深入  MFC  程式設計 



                      下表是对所有collection classes 性质的一份摘要整理(参考自微软的官方手册: 



                      Programming With MFC and Win32 ): 



                      类别                C++ template          Serializable        Dumpable       type…safe 



                     CArray               Yes              Yes           Yes          No 



                     CTypedPtrArray       Yes              Depends       Yes           Yes 



                     CByteArray           No               Yes            Yes           Yes  



                     CDWordArray          No               Yes            Yes           Yes  



                     CObArray             No               Yes            Yes           No 



                     CPtrArray            No               No             Yes           No 



                     CStringArray         No               Yes            Yes           Yes  



                     CWordArray           No               Yes            Yes           Yes  



                     CUIntArray           No               No            Yes           Yes  



                     CList                Yes              Yes           Yes          No 



                     CTypedPtrList        Yes              Depends       Yes           Yes 



                     CObList              No               Yes            Yes           No 



                     CPtrList             No               No             Yes           No 



                     CStringList          No               Yes            Yes           Yes  



                     CMap                 Yes              Yes           Yes          No 



                     CTypedPtrMap         Yes              Depends       Yes           Yes 



                     CMapPtrToWord        No               No             Yes           No 



                     CMapPtrToPtr         No               No             Yes           No 



                     CMapStringToOb       No               Yes            Yes           No 



                     CMapStringToPtr      No               No             Yes           No 



                     CMapStringToString   No               Yes            Yes           Yes  



                     CMapWordToOb         No               Yes            Yes           No 



                     CMapWordToPtr        No               No             Yes           No 



                      若要文件读写,你必须明白调用collection object 的Serialize 函数;若要内容倾印, 



                       你必须明白调用其Dump 函数。不能够使用archive 

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的