文章类型: VC&C++
关键词: MFC文档视图结构
内容摘要: MFC文档视图结构

MFC文档视图结构

2016/10/10 12:04:43    来源:apple    阅读:

文档视图结构

    文档视图结构,通过文档对象管理应用程序的数据,通过视图对象控制数据的显示,并将应用程序的数据管理和数据显示分离开来。

 

1. 文档视图结构概述

   文档,应用程序数据的基本元素的集合,构成应用程序所使用的数据单元,提供数据管理和维护的手段。

   视图,在文档和用户之间起中介作用,是数据的用户窗口,提供文档数据的显示功能,并为用户提供了数据交互操作的界面。

   MFC提供了两类文档应用程序:

单文档界面(SDI)应用程序---只有一个窗口,即用户在同一时刻只能操作一个文档,比如:记事本

多文档界面(MDI)应用程序---同时可以操作多个文档,比如:Microsoft Word

   两者的区别主要有两点:

1)MDI比SDI多了一个类CChildFrame。

2)SDI的CMainFrame的基类是CFrameWnd,MDI的CMainFrame的基类是CMDIFrameWnd

 

2. 文档,视图,框架,文档模板

   文档视图结构4要素:文档,视图,框架,文档模板。

文档---管理应用程序的数据

视图---控制数据的显示

框架---进行界面管理

文档模板---负责创建文档,视图和框架

   

blob.png

1)文档

   对数据进行管理和维护,数据---成员变量,保存数据(到磁盘文件或数据库)---文档类串行化(serialize)方法,WM_COMMAND---处理命令消息。注:不能除命令消息外的其他Windows消息。

   类CDocument---所有文档类的基类,提供了文档类所需的,最基本的功能,为文档对象以及与其他对象(视图对象,框架窗口对象,应用程序对象等)的交互提供了基本框架

   继承关系:CObject

               |------CCmdTarget

                          |------CDOcument

    类CDocument提供的方法:

操作方法:

    SetModifiedFlag,设置标记,用于指出上一次保存后文档已被修改过,用于确定文档是否需要保存。

    UpdateAllView,通知所有视图文档被修改过,可以维持多视图的同步

虚拟方法:

    DeleteContents,删除文档中已存在的数据

    OnNewDocument/OnOpenDocument,创建一个新的文档,或打开一个已存在的文档。

 

2)视图

   将文档中的数据取出后显示给用户,同时接收用户通过用户操作对文档数据的编辑和修改

   类CView---所有视图类的基类

   继承关系:CObject

               |------CCmdTarget

                          |------CWnd

                                  |------CView

   类CView是一个纯虚基类,基本方法

操作方法:

    m_pDocument保存对应文档的指针,GetDocument获取m_pDocument中的文档对象指针

虚拟方法:

    WM_PAINT消息--->OnPaint方法--->OnDraw方法

    OnUpdate方法,里面有一个Invalidate函数,用来设置窗口的无效区域,并产生一个WM_PAINT消息

    OnActivateView,用来激活某个视图,或使某个视图无效

常见到的CView派生类

CScrollView,实现视图的滚动显示

CEditView,支持编辑控件显示

CListView,支持列表控件显示

CTreeView,支持树形控件显示

CRecordView,支持数据库记录显示

CRichEditView,支持Rich Edit控件显示

 

3)框架

   应用程序在显示屏上定义的实际工作区域,是视图的容器,为应用程序的用户界面提供结构框架,应用程序的主窗口,负责管理其包容的窗口

   类CFrameWnd---SDI的框架窗口

   类CMDIFrameWnd/CMDIChildWnd---MDI的框架窗口

   继承关系:CObject

               |------CCmdTarget

                          |------CWnd

                                  |----CFrameWnd

                                          |------CMDIFrameWnd

                                          |------CMDIChildWnd

   类CFrameWnd的方法

初始化方法

   Create---创建并初始化Windows框架窗口,设置窗口样式等窗口属性

   LoadFrame---从资源中获取框架窗口的标题,图标,菜单,加速键等信息

   PreCreateWindow--CWnd的方法,主要用来注册窗口类

   类CMDIFrameWnd,所有MDI文档子窗口的容器,并与子窗口共享菜单

 

4)文档模板

   创建和管理文档类,与文档类相关联的视窗类,以及为视窗类提供显示的框架窗口,创建文档->创建框架->创建视图

   文档模板与三者的关系

blob.png

   类CDocTemplate,抽象基类,定义了文档模板的基本处理函数接口。3个重要的成员变量:

m_pDocClass, m_pViewClass和m_pFrameClass分别代表对应的文档,视图和框架窗口的CRuntimeClass对象指针

   继承关系:CObject

               |------CCmdTarget

                          |------CDocTemplate

                                  |----CSingleDocTemplate

                                  |----CMultipleDocTemplate

   类CSingleDocTemplate,成员变量m_pOnlyDoc指向文档对象,

   类CMultipleDocTemplate,成员变量m_docList指向文档对象组成的链表

 

3. 文档视图结构的内在机制

1)文档,视图和框架的关系

   A. 文档保留了该文档的视图列表,一个文档至少有一个相关联的视图,而一个视图只能与一个文档关联

   B. 视图保留了指向其对应文档的指针,该指针包含在视图所在框架窗口中

   C. 框架保留了指向骑当前活动视图的指针

(1) 文档和视图

    文档是被视图观察的对象。

文档:CDocument::GetFirstViewPosition

      CDocument::GetNextView

视图:CView::GetDocument

(2) 视图和框架

    框架是视图的容器,同时框架还提供了菜单,标题栏,状态栏等资源

视图:CView::GetParentFrame

框架:CFrameWnd::GetActiveView

(3) 框架和文档

    框架<-->视图<-->文档

框架:CFrameWnd::GetActiveDocument

 

2)消息处理

   命令消息-->视图--(未处理)-->文档--(未处理)-->框架--(未处理)-->应用

   除命令消息外的消息-->视图--(未处理)-->框架--(未处理)-->应用

↑ 上一篇文章:MFC应用程序框架入门 关键词:VC,VC++6.0,MFC,程序框架 发布日期:2016/10/10 11:49:23
↓ 下一篇文章:NRC编码字符大全 关键词:NRC编码字符大全,CSS 发布日期:2016/10/10 13:50:10
相关目录:.NETVC&C++软件开发
我要评论
正在加载评论信息......