SDI、MDI 和拆分窗口 文档、视图和单文档界面 一、文档/视图结构的程序 文档/视图结构的程序不同于传统的 MFC 应用程序,传统的 MFC 应用程序体系主要包括两个对象:应用程序对象和主窗口对象,应用程序对象的主要任务是创建 程序的主窗口而主窗口对象的任务主要是用来和程序用户进行交互操作。文档 /视图体系的 MFC 应用程序包括了应用程序对象、框架窗口对象、视图对象和文档对 象四个方面。应用程序对象和传统 MFC 程序当中的应用程序对象完成类似的任务:创建其余的三个对象;而框架窗口对象创建了程序窗口的框架;视图对象是一个 覆盖在框架窗口对象的客户区上方的一个子窗口,在这个子窗口当中程序实现与用户的交互;文档对象主要是用来实现保存程序数据的功能。在这个体系当中视图对 象和文档对象通过文档的公有成员函数实现数据的交互。 使用文档/视图体系的好处在于通过 VC 所提供的应用程序向导我们可以方便的创建一个应用程序,并且向导将为我们完成程序当中内存数据和磁盘数据交互的过程,我们只需要为整个应用程序添加核心的代码就可以获得一个带有磁盘 IO 的强大应用程序。 二、文档 文档提供了应用程序数据操作的集合,在这个类当中我们封装所有程序所需要的数据,并且为这些数据的修改和读取提供公有成员函数供视图对象和文档对象交互使用。 在文档类当中我们经常需要覆盖的基类成员函数有:OnNewDocument()这个成员函数提供了创建新文档时文档对象的数据初始化过程;之所以不使用 文档对象的构造函数来完成这个功能是因为文档对象仅仅在应用程序创建之初才被创建并调用构造函数。Serialize(CArchive& ar)这个函数提供了文档数据与磁盘 IO 的交互功能。 文档类当中我们经常使用的基类成员函数有 SetModifiedFlag(BOOL) 这个函数设置一个修改标志,如果在文档被关闭的时候这个标志为 TRUE 那么程序会提示用户保存数据;另一个函数是 UpdateAllViews(CView *) 这个函数通知与文档对象相关联的视图对象刷新他的显示。 三、视图 视图对象提供了程序与用户的交互,他通过文档对象的公用成员函数实现程序内部数据的交互。 在视图对象当中我们经常要覆盖的成员函数是 OnDraw(CDC *)这个函数用来实现重画视图对象表面。另外 InitialDraw 成员函数跟文档类当中的 OnNewDocument成员函数类似,尽当新文档被加载时 才被调用,他完成加载新文档时视图上的绘图工作。 在视图对象当中我们经常使...