正在加载图片...
第12单元文档/视图结构 244 在 OnDraw()函数中,首先调用 Get document()函数,取得指向当前视图所对应的 文档的指针。然后通过这个指针来访问文档中的数据。 在绘图时,可以通过传给 On Draw()函数的设备上下文指针pDC进行GD调用。开 始绘图之前,往往需要选择GDI资源(或GDI对象,包括画笔、刷子、字体等),将其选 入设备环境。绘图代码是与设备无关的,也就是说在编写这些代码时并不需要知道目前使用 的是什么设备(屏幕、打印机或其他绘图设备)。 视图类的 OnInitialUpdate()虚成员函数在应用程序启动,或用户从Fle菜单中选择了 New或者open选项时被调用。因此,这是添加某些与文档显示有关的初始化工作的有关代 码的好地方。重载该虚函数时要注意确保调用了基类CⅤiew的 OnInitialUpdate()成员函数 126文档类 文档类 CDocument的派生类对象规定了应用程序的数据 当用户启动应用程序,或从应用程序的File菜单中选择New选项时,都需要对文档类 的数据成员进行初始化。我们知道,一般类的数据成员的初始化工作都是在构造函数中完成 的,在构造函数调用结束时对象才真正存在。但对于文档类来说却不同,文档类的数据成员 初始化工作是在 OnNewDocument()成员函数中完成的,此时文档对象已经存在。为什么 呢?这是因为,在单文档界面(SD)应用程序中,应用程序启动时,文档对象就己经被创 建,直到主框架窗口被关闭时才被销毁。在用户选择Fie/New菜单选项时,应用程序对象 并不是销毁原来的文档对象然后重建新的文档对象,而只是重新初始化(Re- Initialization) 文档对象的数据成员,这个初始化工作就是由应用程序对象的 OnfileNew()消息处理成员 函数通过调用 OnNew Document()成员函数来完成的。试想,如果把初始化数据成员的工 作放在构造函数中,由于对象已经存在,构造函数无法被调用,也就无法完成初始化数据成 员的工作。为了避免重复代码,在应用程序启动时,应用程序对象也是通过调用 OnNewDocument()成员函数来初始化文档对象的数据成员 在关闭应用程序并删除文档对象时,或用 File/Open菜单选项打开一个文档时,需要清 理文档中的数据。同文档的初始化一样,文档的清理也不是在文档的析构函数中完成,而是 在文档类的 DeleteContents()成员函数中完成的。文档类的析构函数只用于清除那些在对 象生存期都将存在的数据项(如使用new运算符生成的数据)。 DeleteContents()成员函数 的调用有两个作用: 1.删除文档的数据 2.确信一个文档在使用前为空。 注意, OnNewDocument()函数也会调用 DeleteContents()函数。在用户选择 File/Open 菜单选项时,应用程序对象调用应用程序类的 On FileOpen()成员函数,提示用户输入文 件名,然后调用 CWinApp: OpenDocumentFile()函数打开一个文件。 Open Document File() 函数在打开文件后首先调用 DeleteContents()成员函数清理文档中的数据,确保消除以前 打开的文档的数据被清理掉。 缺省的 DeleteContents()函数什么也不做。在编写应用程序时,需要重载 DeleteContents第 12 单元 文档/视图结构 - 244 - 在 OnDraw()函数中,首先调用 GetDocument()函数,取得指向当前视图所对应的 文档的指针。然后通过这个指针来访问文档中的数据。 在绘图时,可以通过传给 OnDraw()函数的设备上下文指针 pDC 进行 GDI 调用。开 始绘图之前,往往需要选择 GDI 资源(或 GDI 对象,包括画笔、刷子、字体等),将其选 入设备环境。绘图代码是与设备无关的,也就是说在编写这些代码时并不需要知道目前使用 的是什么设备(屏幕、打印机或其他绘图设备)。 视图类的 OnInitialUpdate()虚成员函数在应用程序启动,或用户从 File 菜单中选择了 New 或者 Open 选项时被调用。因此,这是添加某些与文档显示有关的初始化工作的有关代 码的好地方。重载该虚函数时要注意确保调用了基类 CView 的 OnInitialUpdate()成员函数。 12.6 文档类 文档类 CDocument 的派生类对象规定了应用程序的数据。 当用户启动应用程序,或从应用程序的 File 菜单中选择 New 选项时,都需要对文档类 的数据成员进行初始化。我们知道,一般类的数据成员的初始化工作都是在构造函数中完成 的,在构造函数调用结束时对象才真正存在。但对于文档类来说却不同,文档类的数据成员 初始化工作是在 OnNewDocument()成员函数中完成的,此时文档对象已经存在。为什么 呢?这是因为,在单文档界面(SDI)应用程序中,应用程序启动时,文档对象就已经被创 建,直到主框架窗口被关闭时才被销毁。在用户选择 File/New 菜单选项时,应用程序对象 并不是销毁原来的文档对象然后重建新的文档对象,而只是重新初始化(Re-Initialization) 文档对象的数据成员,这个初始化工作就是由应用程序对象的 OnFileNew()消息处理成员 函数通过调用 OnNewDocument()成员函数来完成的。试想,如果把初始化数据成员的工 作放在构造函数中,由于对象已经存在,构造函数无法被调用,也就无法完成初始化数据成 员的工作。为了避免重复代码,在应用程序启动时,应用程序对象也是通过调用 OnNewDocument()成员函数来初始化文档对象的数据成员。 在关闭应用程序并删除文档对象时,或用 File/Open 菜单选项打开一个文档时,需要清 理文档中的数据。同文档的初始化一样,文档的清理也不是在文档的析构函数中完成,而是 在文档类的 DeleteContents()成员函数中完成的。文档类的析构函数只用于清除那些在对 象生存期都将存在的数据项(如使用 new 运算符生成的数据)。DeleteContents()成员函数 的调用有两个作用: 1.删除文档的数据; 2.确信一个文档在使用前为空。 注意,OnNewDocument()函数也会调用 DeleteContents()函数。在用户选择 File/Open 菜单选项时,应用程序对象调用应用程序类的 OnFileOpen()成员函数,提示用户输入文 件名,然后调用 CWinApp::OpenDocumentFile()函数打开一个文件。OpenDocumentFile() 函数在打开文件后首先调用 DeleteContents()成员函数清理文档中的数据,确保消除以前 打开的文档的数据被清理掉。 缺省的 DeleteContents()函数什么也不做。在编写应用程序时,需要重载 DeleteContents
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有