友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

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

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!




    的类别如图7…1 所示,请与图6…1 做个比较。 



                                                           411 


…………………………………………………………Page 474……………………………………………………………

                   第篇    湷觥 FC  程式設計 



                    CObject 

                     CObject 



                        CCmdTarget 

                        CCmdTarget 



                           CWinThread 

                            CWinThread 



                               CWinApp 

                                CWinApp 



                                  CMyWinApp 

                                   CMyWinApp 



                           CWnd 

                            CWnd 



                               CView 

                                CView 



                                  CMyView 



                               CFrameWnd 

                                CFrameWnd 



                                  CMDIFrameWnd       CMyMDIFrameWnd 

                                   CMDIFrameWnd      CMyMDIFrameWnd 



                                  CMDIChildWnd       CMyMDIChildWnd 

                                   CMDIChildWnd      CMyMDIChildWnd 



                                                     CControlBar 

                           CDocument                 CControlBar 

                            CDocument 



                               CMyDoc                   CStatusBar 

                                                         CStatusBar 

                                CMyDoc 

                                                        CToolBar 

                           CDocTemplate                  CToolBar 

                            CDocTemplate 



                               CMultiDocTemplate     CDialog           CMyDialog 

                                CMultiDocTemplate     CDialog           CMyDialog 



                           图7…1 本章范例程序所使用的MFC 类别。请与图6…1 做比较。 



            MFC 程序的UI 新风貌 



                   一套好软件少不得一幅漂亮的使用者接口。图7…2 是信手拈来的几个知名Windows 软 



                   体,它们一致具备了工具栏和状态列等视觉对象,并拥有MDI 风格。利用MFC ,我们 



                   很轻易就能够做出同等级的UI 接口。 



                   第7章简单而完整:MFC 骨干程序 



412 


…………………………………………………………Page 475……………………………………………………………

                                      第7章    簡單而完整:MFC 骨幹程式 



图7…2a Microsoft Word for Windows,允许使用者同时编辑多份文件,每 



      一份文件就是所谓的document,这些document 窗口绝离不会脱 



      Word 主窗口的管辖。 



                                                                   413 


…………………………………………………………Page 476……………………………………………………………

                第篇    湷觥 FC  程式設計 



                图7…2b Microsoft Excel , 允许同时制作多份报表。每一份报表就是一份 



                       document。 



414 


…………………………………………………………Page 477……………………………………………………………

                                   第7章    簡單而完整:MFC 骨幹程式 



   图7…2c Microsoft PowerPoint 允许同时制作多份演示文稿资料,每一份演示文稿就 



        是一份document 

              。 



撰写MFC 程序,我们一定要放弃传统的「纯手工打造」方式,改用Visual C++ 提供的 



各种开发工具。AppWizard 可以为我们制作出MFC 程序骨干;只要选择某些按钮,不 



费吹灰之力你就可以获得一个很漂亮的程序。这个全自动生产线做出来的程序虽不具备 



任何特殊功能(那正是我们程序员的任务),但已经拥有以下的特征: 



                                                             415 


…………………………………………………………Page 478……………………………………………………………

              第篇    湷觥 FC  程式設計 



                标准的【File】菜单,以及对话框。 



                                              标准的【Edit】菜单(剪贴簿功能)。这 



                                              份菜单是否一开始就有功效,必须视你选 



                                              用哪一种View 而定,例如CEditView 



                                              就内建有剪贴簿功能。 



416 


…………………………………………………………Page 479……………………………………………………………

                                第7章    簡單而完整:MFC 骨幹程式 



                              标准MDI 程序应该具备的 



                               【Window】菜单 



                              【Help】菜单和About 对话框 



                              亦已备妥。 



此外,标准的工具栏和状态列也已备妥,并与菜单内容建立起映射关系。所谓工具栏, 



是将某几个常用的菜单项目以按钮型式呈现出来,有一点热键的味道。这个工具栏可以 



随处停驻(dockable )。所谓状态列,是主窗口最下方的文字显示区;只要菜单拉下,状 



态列就会显示鼠标座落的菜单项目的说明文字。状态列右侧有三个小窗口(可扩充个 



数),用来显示一些特殊按键的状态。 



                                                        417 


…………………………………………………………Page 480……………………………………………………………

               第篇    湷觥 FC  程式設計 



               打印与预视功能也已是半成品。【File 】菜单拉下来可以看到【Print。。。 】和【Print Preview 】 



               两项目: 



               骨干程序的Document 和View  目前都还是白纸一张,需要我们加工,所以一开始看不 



               出打印与预视的真正功能。但如果我们在AppWizard  中选用的View 类别是CEditView 



                (如同第4章292 页),使用者就可以打印其编辑成果,并可以在打印之前预视。也就 



               是说,一进程序代码都不必写,我们就获得了一个可以同时编辑多份文件的文字编辑软件。 



418 


…………………………………………………………Page 481……………………………………………………………

                                                 第7章    簡單而完整:MFC 骨幹程式 



Document/View 支撑你的应用程序 



      我已经多次强调,Document/View 是MFC 进化为Application Framework  的灵魂。这个特 



      征表现于程序设计技术上远多于表现在使用者接口上,因此使用者可能感觉不到什么是 



      Document/View 。程序员呢?程序员将因陌生而有一段阵痛期,然后开始享受它带来的便 



      利。 



      我们在OLE  中看到各对象(注)的集合称为一份Document ;在MDI  中看到子窗口所 



      掌握的资料称为一个Document ;现在在MFC 又看到Document 。〃Document〃 如今处处 



      可见,再过不多久八成也要和〃Object〃 一样地泛滥了。 



      OLE 对象指的是PaintBrush 完成的一张bitmap 、SoundRecorder 完成的一段Wave 声 



      音、Excel 完成的一份电子表格、Word 完成的一份文字等等等。为了恐怕与C++  的「对象」 



      混淆,有些书籍将OLE object 称为OLE item 。 



      在MFC 之中,你可以把Document 简单想作是「资料」。是的,只是资料,那么MFC 



      的CDocument 简单地说就是负责处理资料的类别。 



      问题是,一个预先写好的类别怎么可能管理未知的资料呢?MFC 设计之际那些伟大的天 



      才们并不知道我们的数据结构,不是吗?! 他怎么知道我的程序要处理的资料是简单 



      如: 



         char  name'20'; 

         char  address'30'; 

         int   age; 

         bool  sex; 



      或是复杂如: 



         struct dbllistnode 

                { 

                  struct dbllistnode *next; *prev; 

                  struct info_t 

                         { 

                          int left; 

                          int top; 



                                                                                  419 


…………………………………………………………Page 482……………………………………………………………

                           第篇    湷觥 FC  程式設計 



                                               int width; 

                                               int height; 

                                               void (*cursor)(); 

                                              } *item; 

                                     }; 



                         的确,预先处理未知的资料根本是不可能的。CDocument 只是把空壳做好,等君入瓮。 



                         它可以内嵌其它对象(用来处理基层数据类型如串行、数组等等),所以程序员可以在 



                         Document  中拼拼凑凑出实际想要表达的文件完整格式。下一章进入Scribble 程序的实际 



                         设计时,你就能够感受这一点。 



                         CDocument 的另一价值在于它搭配了另一个重要的类别:CView。 



                         不论什么型式,数据总是有体有面。实际的资料数值就是体,显示在屏幕上(甚而打印 



                         机上)的画面就是面(图7…3a )。「数值的处理」应该使用字节、整数、浮点数、串 



                         列、数组等数据结构,而「数值的表现」应该使用绘图工具如坐标系统、笔刷颜色、点 



                         线圆弧、字形。。。。CView 就是为了资料的表现而设计的。 



                            CMyDoc::Serialize(。。。) 

                                                         CMyView::OnDraw(。。。) 

                            { 

                                                         { 

                             // 把资料读出文件                   // 取得Document, 

                             // 放入Document 中              // 调用GDI 函数, 

                            }                             // 将资料表现出来。 



                                                         } 

                                          磁盘中的文件 



                                The C++ piler gen 

                                ings; all of which a 

                                are caused by the ol 

                                。。。 



                                Hello; I am J。J。Hou;  

                                a goodman。 

                                。。。 



                                The difference; omit 

                                lpCmdLine parameter 

                                。。。 



                             图7…3a Document 是资料的体, View 是资料的面。 



         420 



} 


…………………………………………………………Page 483……………………………………………………………

                                                第7章    簡單而完整:MFC 骨幹程式 



 除了负责显示,View 还负责程序与使用者之间的交谈接口。使用者对资料的编辑、修改 



 都需仰赖窗口上的鼠标与键盘动作才得完成,这些消息都将由View 接受后再通知 



 Document ( 图7…3b) 。 



   CMyDoc::Serialize(。。。)       CMyView::OnLButtonDown(。。。) 

   {                            { 

   //把资料从Document 写入文件           //记录鼠标位置为DWORD, 

                                 //并将DWORD 加入Document 

   }                            } 



                                                        当使用者在窗口中按下鼠标左键,LButtonDown 

                  磁盘中的文件文件 

                                                        消息会被窗口攫取,只要程序员曾对此消息设定 

          04 00 FF FF 01 00 07 

          43 53 74 72 6F 6B 65                          消息映射,CMyView::OnLButtonDown 就会被 

          00 02 00 26 00 08 00 

          。。。                                           调用. 



          00 08 00 01 80 05 00 

          00 26 00 1C 00 27 00 

          。。。 



          
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!