轻松玩转mfc文档视图架构编程

上传人:第*** 文档编号:56099415 上传时间:2018-10-09 格式:PDF 页数:81 大小:1.06MB
返回 下载 相关 举报
轻松玩转mfc文档视图架构编程_第1页
第1页 / 共81页
轻松玩转mfc文档视图架构编程_第2页
第2页 / 共81页
轻松玩转mfc文档视图架构编程_第3页
第3页 / 共81页
轻松玩转mfc文档视图架构编程_第4页
第4页 / 共81页
轻松玩转mfc文档视图架构编程_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《轻松玩转mfc文档视图架构编程》由会员分享,可在线阅读,更多相关《轻松玩转mfc文档视图架构编程(81页珍藏版)》请在金锄头文库上搜索。

1、教程:轻松玩转教程:轻松玩转 MFC 文档视图架构编程文档视图架构编程 “文档/视图”结构是 MFC 中结构最为复杂,体系最为庞大,而又最富有特色的部分,其中涉及到应用、 文档模板、文档、视图、SDI 窗口、MDI 框架窗口、MDI 子窗口等多种不同的类,如果不了解这些类及其 盘根错节的内部联系的话,就不可能编写出高水平的文档/视图程序。 学习“文档/视图“结构的意义还不只于其本身,通过该架构的学习,一步步领略 MFC 设计者的神功奥 妙,也将进一步增强我们自身对庞大程序框架的把握能力。 一个优秀的程序员是可以写出一个个优秀函数的程序员,而一个优秀的系统设计师则需从全局把握软 件的架构,分析和

2、学习“文档/视图“结构将是我们成为软件系统设计师之旅的一个重要阶段。 理解了 MFC 文档视图类的意义及它们纵横交错的关系也就理解了“文档/视图”结构的基本概念, 在此基 础上,我们再进一步研究“文档/视图”结构的 MFC 程序消息流动的方向,这样就完全彻底明白了基于“文档/ 视图“结构 MFC 程序的“生死因果”。 1 第一讲第一讲 基本概念基本概念 深入浅出深入浅出 MFC 文档文档/视图架构之基本概念视图架构之基本概念 MFC 引入了“文档/视图“结构的概念, 理解这个结构是编写基于 MFC 编写复杂 Visual C+程序的关键。 “文档/视图“中主要涉及到四种类: (1)文档模板:

3、class CDocTemplate; / template for document creation class CSingleDocTemplate; / SDI support class CMultiDocTemplate; / MDI support (2)文档: class CDocument; / main document abstraction (3)视图: / views on a document class CView; / a view on a document class CScrollView; / a scrolling view (4)框架窗口: / fr

4、ame windows class CFrameWnd; / standard SDI frame class CMDIFrameWnd; / standard MDI frame class CMDIChildWnd; / standard MDI child class CMiniFrameWnd; / half-height caption frame wnd 理解了这 4 个类各自的意义及它们纵横交错的关系也就理解了“文档/视图“结构的基本概念,在此基础 上,我们还需要进一步研究“文档/视图“结构的 MFC 程序消息流动的方向,这样就完全彻底明白了基于“文 档/视图“结构 MFC 程序

5、的“生死因果“。 出于以上考虑,本文这样组织了各次连载的内容: 第 1 次连载进行基本概念的介绍,第 25 次连载分别讲述文档模板、文档、视图和框架窗口四个类 的功能和主要函数,连载 6 则综合阐述四个类之间的关系,接着以连载 7 讲解消息流动的方向,最后的连 载 8 则以实例剖析连载 17 所讲述的所有内容。 2 本文所有的代码基于 WIN32 平台开发,调试环境为 Visual C+6.0。 架构架构 MFC“文档/视图“结构被认为是一种架构,关于什么是架构,这是个“仁者见仁,智者见智“的问题。在 笔者看来,成其为架构者,必具备如下两个特性: (1)它是一种基础性平台,是一个模型。通过这个

6、平台、这个模型,我们在上面进一步修饰,可以得 到无穷无尽的新事物。譬如,建筑学上的钢筋混凝土结构、ISO(国际标准化组织)的 OSI(开放式系统 互连)七层模型。架构只是一种基础性平台,不同于用这个架构造出的实例。钢筋混凝土结构是架构,而 用钢筋混凝土结构造出的房子就不能称为架构。 这个特性强调了架构的外部特征,即架构具有可学习、可再生、可实例化的特点,是所有基于该架构 所构造实例的共性,是贯串在它们体内的一根“筋“,但各个基于该架构所构造的实例彼此是存在差异的。 (2)它是一个由内部有联系的事物所组成的一个有机整体。架构中的内部成员不是彼此松散的,并非 各自“占山为王“,它们歃血为盟,紧密合

7、作,彼此都有明确的责任和分工,因此共同构筑了一个统一的基 础性平台、一个统一的模型。譬如,OSI 模型从物理层到应用层进行了良好的合作,虽然内部包含了复杂 的多个层次,但仍然脉络清晰。 由此可见,架构的第 2 个特性是服务于第 1 个特性的。理解架构,关键是理解以上两个特性。而针对 特定的“文档/视图“结构,则需理解如下两个问题: (1)学习这个架构,并学会在这个架构上造房子(编写基于“文档/视图“结构的程序); (2)理解这个架构内部的工作机理(文档模板、文档、视图和框架窗口四个类是如何联系为一个有机 整体的),并在造房子时加以灵活应用(重载相关的类)。 在这里,我们再引用几位专家(或企业)

8、关于架构的定义以供读者进一步参考: The key ideas of a commercial application framework : a generic app on steroids that provides a large amount of general-purpose functionality within a well-planned, welltested, cohesive structure. (Application framework is) an extended collection of classes that cooperate to suppor

9、t a complete application architecture or application model, providing more complete application development support than a simple set of class libraries. MacApp(Apples C+ application framework) An application framework is an integrated object-oriented software system that offers all the application-

10、level classes(documents, views, and commands)needed by a generic application. An application framework is meant to be used in its entirety, and fosters both design reuse and code reuse. An application framework embodies a particular philosophy for structuring an application, and in return for a larg

11、e mass of prebuilt functionality, the programmer gives up control over many architectural-design decisions. Ray Valdes 3 什么是Application Framework?Framework 这个字眼有组织、框架、体制的意思,Application Framework 不仅是一般性的泛称,它其实还是对象导向领域中的一个专有名词。 基本上你可以说,Application Framework 是一个完整的程序模型,具备标准应用软件所需的一切基 本功能,像是档案存取、打印预视、数据

12、交换.,以及这些功能的使用接口(工具列、状态列、选单、对 话盒)。如果更以术语来说,Application Framework 就是由一整组合作无间的“对象“架构起来的大模型。 喔不不,当它还没有与你的程序产生火花的时候,它还只是有形无体,应该说是一组合作无间的“类别“架 构起来的大模型。 侯捷 最后,要强调的是,笔者之所以用一个较长的篇幅来连载关于“文档/视图“结构的内容,是因为“文档/ 视图“结构是 MFC 中结构最为复杂,体系最为庞大,而又最富有特色的部分,其中涉及到应用、文档模板、 文档、视图、SDI 窗口、MDI 框架窗口、MDI 子窗口等多种不同的类,如果不了解这些类及其盘根错节的

13、 内部联系的话,就不可能编写出高水平的文档/视图程序。当然,学习“文档/视图“结构的意义还不只于其本 身,通过该架构的学习,一步步领略 MFC 设计者的神功奥妙,也将进一步增强我们自身对庞大程序框架 的把握能力。一个优秀的程序员是可以写出一个个优秀函数的程序员,而一个优秀的系统设计师则需从全 局把握软件的架构,分析和学习“文档/视图“结构相信将是我们成为系统设计师之旅的一个有利环节。 4 第二讲第二讲 文档模板文档模板 深入浅出深入浅出 MFC 文档文档/视图架构之文档模板视图架构之文档模板 1. 文档模板管理者类 CDocManager 在“文档/视图“架构的 MFC 程序中,提供了文档模板

14、管理者类 CDocManager,由它管理应用程序所包 含的文档模板。我们先看看这个类的声明: / / CDocTemplate manager object class CDocManager : public CObject DECLARE_DYNAMIC(CDocManager) public: / Constructor CDocManager(); /Document functions virtual void AddDocTemplate(CDocTemplate* pTemplate); virtual POSITION GetFirstDocTemplatePosition(

15、) const; virtual CDocTemplate* GetNextDocTemplate(POSITION virtual void RegisterShellFileTypes(BOOL bCompat); void UnregisterShellFileTypes(); virtual CDocument* OpenDocumentFile(LPCTSTR lpszFileName); / open named file virtual BOOL SaveAllModified(); / save before exit virtual void CloseAllDocument

16、s(BOOL bEndSession); / close documents before exiting virtual int GetOpenDocumentCount(); / helper for standard commdlg dialogs virtual BOOL DoPromptFileName(CString /Commands / Advanced: process async DDE request virtual BOOL OnDDECommand(LPTSTR lpszCommand); virtual void OnFileNew(); virtual void OnFileOpen(); / Implementation protected: 5 CPtrList m_templateList; int GetDo

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号