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

第31部分

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

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

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






图2…1 联结器会把所有赘余的template 码剔除。这在Borland 联结器里 



          头称为smart 技术。其它联结器亦使用类似的技术。 



                                                                             107 


…………………………………………………………Page 170……………………………………………………………

               第篇  勿在浮砂築高台 



108 


…………………………………………………………Page 171……………………………………………………………

          

第3章 



             MFC 六大关键技术之仿真 



                    演化(evolution)永远在进行, 

             这个世界却不是每天都有革命(revolution)发生。 

         Application Framework 在软件界确实称得上具有革命精神。 



 仿真MFC ?有必要吗?意义何在?如何仿真? 



 我已经在序言以及导读开宗明义说过了,这本书除了教导你使用MFC,另一个重要的功 

 能是让你认识一个application framework  的内部运作。以MFC 为教学载具,我既可以 

 让你领略application framework  的设计方式,更可以让你熟悉MFC 类别,将来运用时 

 得心应手。呵,双效合一。 



 整个MFC 4。0 多达189 个类别,源代码达252 个实作档,58 个头文件,共10 MB 之多。 



 MFC 4。2 又多加了29 个类别。这么庞大的对象,当然不是每一个类别每一个数据结构 

 都是我的仿真目标。我只挑选最神秘又最重要,与应用程序主干息息相关的题目,包括: 



    MFC  

 ■      程序的初始化过程 



    RTTI Runtime Type Information 

 ■      (                   )执行时期型别信息 



    Dynamic Creation  

 ■               动态生成 



    Persistence  

 ■          永续留存 



    Message Mapping  

 ■               消息映射 



    Message Routing  

 ■              消息绕行 



                                                                      109 


…………………………………………………………Page 172……………………………………………………………

             第篇  勿在浮砂築高台 



             MFC 本身的设计在Application Framework 之中不见得最好,敌视者甚至认为它是个 



             Minotaur (注)!但无论如何,这是当今软件霸主微软公司的产品,从探究application 



             framework 设计的角度来说,实为一个重要参考;而如果从选择一套application framework 



             作为软件开发工具的角度来说,单就就业市场的需求,我对MFC  的推荐再加10 分! 



             注:Minotaur 是希腊神话中的牛头人身怪物,居住在迷宫之中。进入迷宫的人如果走不 



                出来,就会被一口吃掉 



             另一个问题是,为什么要仿真?第三篇第四篇各章节不是还要挖MFC 源代码来看吗?原 



             因是MFC 太过庞大,我必须撇开枝节,把唯一重点突显出来,才容易收到教育效果。而 



             且,仿真才能实证嘛! 



             如何仿真?我采用文字模式,也就是所谓的Console 程序,这样可以把程序结构的负荷 



             降到最低。但是像消息映射和消息绕行怎么办?消息的流动是Windows 程序才有的特 



             征啊!唔,看了你就知道。 



             我的最高原则是:简化再简化,简化到不能再简化。 



             请注意,以下所有程序的类别阶层架构、类别名称、变量名称、结构名称、函数名称、 



             函数行为,都以MFC 为仿真对象,具体而微。也可以说,我从数以万行计的MFC 原 



             代码中,「偷」了一些出来,砍掉旁枝末节,只露出重点。 



             在文件的安排上,我把仿真MFC  的类别都集中在MFC。H 和MFC。CPP  中,把自己衍 



             生的类别集中在MY。H 和MY。CPP  中。对于自定类别,我的命名方式是在父类别的名 



             称前面加一个〃My〃,例如衍生自CWinApp 者,名为CMyWinApp,衍生自CDocument 



             者,名为CMyDoc。 



110 


…………………………………………………………Page 173……………………………………………………………

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



 MFC 类别阶层 



     首先我以一个极简单的程序Frame1,把MFC 数个最重要类别的阶层关系仿真出来: 



                           CObject 

                            CObject 



                              CCmdTarget 

                               CCmdTarget 



                                  CWinThread 

                                  CWinThread 



                                     CWinApp 

                                      CWinApp 



                                        CMyWinApp 

                                         CMyWinApp 



                                  CWnd 

                                  CWnd 



                                     CView 



                                        CMyView 

                                         CMyView 



                                     CFrameWnd 

                                      CFrameWnd 



                                        CMyFrameWnd 

                                         CMyFrameWnd 



                                  CDocument 

                                  CDocument 



                                     CMyDoc 

                                      CMyDoc 



      这个实例仿真MFC  的类别阶层。后续数节中,我会继续在这个类别阶层上开发新的能 



      力。在这些名为Frame?  的各范例中,我以MFC 源代码为蓝本,尽量仿真MFC  的内部 



      行为,并且使用完全相同的类别名称、函数名称、变量名称。这样的仿真对于我们在第 



      三篇以及第四篇中深入探讨MFC 时将有莫大助益。相信我,这是真的。 



Frame1 范例程序 



      MFC。H 



      #0001  #include  

      #0002 

      #0003  class CObject 

      #0004  { 

      #0005  public: 



                                                                                          111 


…………………………………………………………Page 174……………………………………………………………

                  第篇  勿在浮砂築高台 



                  #0006    CObject::CObject()  {  cout 

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

你可能喜欢的