VS2010-MFC(文档、视图和框架:概述)

转自:http://www.jizhuomi.com/software/221.html

前面几节讲了菜单工具栏状态栏的使用,本节开始将为大家讲解文档、视图和框架的知识。

文档、视图和框架简介

VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工程Example34中,我们可以看到MFC向导自动为我们生成了CExample34Doc类、CExample34View类和CMainFrame类,它们就分别是文档类、视图类和框架窗口类

文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展。下面分别介绍这种结构中涉及到的几个重要概念。

文档

文档对象用于管理和维护数据,包括保存数据、取出数据以及修改数据等操作,在数据被修改以后,文档可以通知其对应的所有视图更新显示。

视图

视图对象将文档中的数据可视化,负责从文档对象中取出数据显示给用户,并接受用户的输入和编辑,将数据的改变反映给文档对象。视图充当了文档和用户之间媒介的角色。

 框架

一个文档可能有多个视图界面,这就需要有框架来管理了。框架就是用来管理文档和视图的。框架窗口是应用程序的主窗口,应用程序执行时会先创建一个最顶层的框架窗口。视图窗口是没有菜单和边界的子窗口,它必须包含在框架窗口中,即置于框架窗口的客户区内。

文档模板

文档模板中存放了与文档、视图和框架相关的信息。应用程序通过文档模板创建文档对象、框架窗口对象和视图对象。另外,文档、视图和框架之间的关系也是由文档模板来管理的。

我们来看看Example34单文档程序中,CExample34App应用程序类的成员函数CExample34App::InitInstance()创建并注册文档模板的部分:

C++代码

BOOL CExample34App::InitInstance()
{
    ......略
    // Register the application‘s document templates.  Document templates
    //  serve as the connection between documents, frame windows and views
    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(CExample34Doc),
        RUNTIME_CLASS(CMainFrame),       // main SDI frame window
        RUNTIME_CLASS(CExample34View));
    if (!pDocTemplate)
        return FALSE;
    AddDocTemplate(pDocTemplate);   

    ......略   

    return TRUE;
}  

在构造文档模板类CSingleDocTemplate的对象时,第一个参数是资源ID IDR_MAINFRAME,它包括框架窗口图标等,后面的三个参数都是RUNTIME_CLASS宏的调用,RUNTIME_CLASS用于获取类的运行时信息,文档模板可以根据这些动态创建信息来创建相应类的对象,即文档对象、框架窗口对象和视图对象。AddDocTemplate函数用来注册文档模板对象。

框架类、文档类和视图类

VS2010自动生成的代码中,框架类继承于CFrameWndEx类,文档类继承于CDocument类,视图类继承于CView类。

CFrameWndEx类又继承于CFrameWnd类,CFrameWnd类中用于管理文档和视图的成员函数包括:

virtual CDocument* GetActiveDocument( );

获得当前活动视图对应文档对象的指针,如果不存在则返回NULL。

CView* GetActiveView( ) const;

获得当前活动视图对象的指针,如果不存在则返回NULL。

void SetActiveView(CView* pViewNew, BOOL bNotify = TRUE);

设置活动视图。参数pViewNew为要激活的视图对象的指针,参数bNotify指定视图是否接收激活通知。

 CDocument类的主要成员函数:

virtual BOOL OnNewDocument( );

创建新文档。可以重载使用。

virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);

打开文档。参数lpszPathName为要打开的文档的路径。可以重载使用。

 virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);

保存文档。参数lpszPathName指定文档保存到的全路径。可以重载使用。

CDocTemplate* GetDocTemplate( ) const;

获取此文档类型对应的文档模板对象的指针。如果此文档没有被文档模板管理则返回NULL。

virtual POSITION GetFirstViewPosition( ) const;

获取文档中视图列表的第一个视图的位置。

virtual CView* GetNextView(POSITION& rPosition) const;

利用此函数可以迭代处理文档的所有视图。参数rPosition为上一次调用GetFirstViewPosition或GetNextView成员函数返回的POSITION值的引用。

void AddView(CView* pView);

为文档增加一个视图。参数pView为要增加的视图对象的指针。

void RemoveView(CView* pView);

移除某个视图与文档的关联。参数pView为要移除的视图对象的指针。

void UpdateAllViews(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL);

在文档被更改后调用此函数更新视图。参数pSender指向修改文档的视图,实际应用时常用来指定哪个视图不需要更新,如果更新所有视图则设为NULL,参数lHint包含了文档修改的信息,参数pHint指向存储文档修改信息的对象。

 CView类中与文档/视图结构相关的成员函数包括:

CDocument* GetDocument( ) const;

获取视图关联的文档对象的指针。如果视图没有关联到文档上则返回NULL。

原文地址:https://www.cnblogs.com/Tang-tangt/p/9471062.html

时间: 2024-11-16 13:22:46

VS2010-MFC(文档、视图和框架:概述)的相关文章

MFC 文档/视图

1.文档修改后,关闭时需要保存,主要用到2个函数,在需要更改文档内容的函数里调用SetModifiedFlag(TRUE),另一个就是SaveModified()函数,简单的例子: BOOL CMFC_Doc::SaveModified() { // TODO: 在此添加专用代码和/或调用基类 return CDocument::SaveModified(); } void CMFC_Doc::SetColor() { m_color=RGB(0,0,0); SetModifiedFlag(TR

理解MFC 文档、视图、框架[转]

理解文档/视图框架                                      出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间的关系封装了起来,初学的朋友往往不得要领,因此写程序往往被局限于在用向导生成的框架中.本文希望能够尽可能说明白文档视图框架之间是如何进行作用,希望能给一些朋友带来小小的帮助.     几个概念:     (虽然大家都知道了,雷神还是要重申一次)     文档对象:是用来保存数据的.     视图对象

MFC文档、视图和框架

文档.视图.框架 文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展. 文档 文档对象用于管理和维护数据,包括保存数据.取出数据以及修改数据等操作,在数据被修改以后,文档可以通知其对应的所有视图更新显示. 文档类继承于CDocument类,主要成员函数: virtual BOOL OnNewDocument( ); 创建新文档.可以重载使用. virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);

mfc学习---文档视图架构

MFC的AppWizard可以生成三种类型的应用程序:基于对话框的应用.单文档应用(SDI)和多文档应用(MDI). 一般情况下,采用文档/视结构的应用程序至少应由以下对象组成:       1.应用程序是一个CwinApp派生对象,它充当全部应用程序的容器.应用程序沿消息映射网络分配消息给它的所有子程序.       2.框架窗口是一CfrmeWnd派生对象.       3.文档是一个CDocument派生对象,它存储应用程序的数据,并把这些信息提供给应用程序的其余部分.       4.视

MFC 文档view视图中根据鼠标指定的某个区域控制延迟显示tip的方法(原创)

前言 在处理文档视图中,有时候需要根据鼠标指定的位置显示相应的提示信息,对于软件功能优化设计,此功能很有必要. 一. 一般处理方法 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法.一般用法步骤: 1.添加CToolTipCtrl成员变量 m_ToolTip. 2.在父窗口中调用EnableToolTips(TRUE); 3.在窗口的OnCreate(或者其他适当的位置)中向ToolTip中

mfc创建文档视图过程

一.如何创建文档视图界面: 创建新的文档视图界面,只需要调用CDocTemplate::OpenDocumentFile(strpath)即可.(strpath为要打开的文档路径,如果是NULL,则生成新的文档). 二.上面这个函数为何能够生成文档视图对象? 因为 1.它调用了CDocTemplate::CreateNewDocument()函数生成了CDocument对象: 2.它调用了CDocTemplate::CreateNewFrame()函数生成了CFrameWnd对象: 3.在生成文

8.MFC多文档视图构架程序

一.多文档视图构架程序 1.相关问题 可以同时管理多个文档(可以有多个文档类对象) 2.相关类 CWinApp / CDocument / CView / CMIDChildWnd / CMIDFrameWnd CDocTemplate CMultiDocTemplate - 多文档模板类 CDocManager - 文档管理类

7.MFC单文档视图构架程序

一.单文档视图构架程序 1.相关问题 只能管理一个文档(只有一个文档类对象) 2.相关类 CWinApp / CFrameWnd / CView / CDocument CDocTemplate - 文档模板类 CSingleDocTemplate - 当文档模板类 CDocManager - 文档管理类 3.关系图

文档/视图结构的应用

用Visual C++的MFC AppWizar生成的函数,一般是"文档/视图"结构的. 在这种程序结构中,文档对象和视图对象的分工是十分明确的,文档对象用来存储.管理和维护数据,而视图对象用来显示和操作数据. 所以,在文档/视图结构的应用程序中,一般要在文档类的声明中定义数据对象,在文档类的构造函数中初始化数据对象,而对数据对象的操作和显示则在视图类对象中完成. 为了在视图对象中,对文档对象的成员进行访问,视图类提供了一个成员函数GetDocument,它的原型为: CDocumen

文档视图程序设计

文档视图程序设计 1.实验目的和要求 (1)创建一个多文档应用程序Ex_SDI,用来操作"课程信息"文档. (2)创建一个可序列化类CCourseInfo,用于"课程信息"的序列化操作. (3)建立用于类型文档的菜单系统,其基本菜单命令包括"添加"."打开"和"保存".选择"添加"菜单命令,弹出相应的信息对话框,添加后信息显示在视图中,并保存在相应的CObArray类对象.选择"