Chinaunix首页 | 论坛 | 博客
  • 博客访问: 630383
  • 博文数量: 133
  • 博客积分: 1566
  • 博客等级: 上尉
  • 技术积分: 1230
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-01 09:31
文章分类

全部博文(133)

文章存档

2019年(1)

2018年(1)

2017年(8)

2016年(9)

2015年(17)

2014年(4)

2013年(31)

2012年(25)

2011年(36)

2010年(1)

我的朋友

分类: C/C++

2012-12-08 21:20:40

文档视图结构
    文档视图结构,通过文档对象管理应用程序的数据,通过视图对象控制数据的显示,并将应用程序的数据管理和数据显示分离开来。
 
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)消息处理
   命令消息-->视图--(未处理)-->文档--(未处理)-->框架--(未处理)-->应用
   除命令消息外的消息-->视图--(未处理)-->框架--(未处理)-->应用
 
阅读(3948) | 评论(0) | 转发(1) |
0

上一篇:MFC消息映射

下一篇:MFC 鼠标和键盘

给主人留下些什么吧!~~