文档视图结构
文档视图结构,通过文档对象管理应用程序的数据,通过视图对象控制数据的显示,并将应用程序的数据管理和数据显示分离开来。
1. 文档视图结构概述
文档,应用程序数据的基本元素的集合,构成应用程序所使用的数据单元,提供数据管理和维护的手段。
视图,在文档和用户之间起中介作用,是数据的用户窗口,提供文档数据的显示功能,并为用户提供了数据交互操作的界面。
MFC提供了两类文档应用程序:
单文档界面(SDI)应用程序---只有一个窗口,即用户在同一时刻只能操作一个文档,比如:记事本
多文档界面(MDI)应用程序---同时可以操作多个文档,比如:Microsoft Word
两者的区别主要有两点:
1)MDI比SDI多了一个类CChildFrame。
2)SDI的CMainFrame的基类是CFrameWnd,MDI的CMainFrame的基类是CMDIFrameWnd
2. 文档,视图,框架,文档模板
文档视图结构4要素:文档,视图,框架,文档模板。
文档---管理应用程序的数据
视图---控制数据的显示
框架---进行界面管理
文档模板---负责创建文档,视图和框架
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)文档模板
创建和管理文档类,与文档类相关联的视窗类,以及为视窗类提供显示的框架窗口,创建文档->创建框架->创建视图
文档模板与三者的关系
类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)消息处理
命令消息-->视图--(未处理)-->文档--(未处理)-->框架--(未处理)-->应用
除命令消息外的消息-->视图--(未处理)-->框架--(未处理)-->应用
阅读(3984) | 评论(0) | 转发(1) |