MFC Document/View 2

1.概述

Document/View是集成在Viaual C++中基于MFC的一个框架。实现对数据的操作显示。

主要包含三部分:

CFrameWnd(框架窗口):所谓框架窗口是指包括菜单、工具栏、状态栏和窗口客户区的整个应用程序的主窗口,相当于简单应用程序框架中所提到的主窗口。

CDocument(文档):数据作为文档类的数据成员,由文档类来进行集中管理,而且文档类将直接与磁盘相联系,实现数据存储和读取。

CView(视图):派生于Cwnd类,用于管理文档/视图结构中的窗口客户区。专门用于对应用程序的数据进行呈现和编辑,在视图类中有一个很重要的函数OnDraw(),是用于进行应用程序数据显示,一般在派生类中都要重写。OnDraw()函数将集中管理所有的数据的显示工作。

2.Document/View结构中的相关类

一般情况下,一个Document/View结构的运用程序会包含如下5个类:CWinApp,CFrameWnd,CDocument,CView,CDocTemplate 

2.1  CWinApp

CWinApp对象就代表程序本体。封装了MFC中有相当固定行为的操作,如MFC程序的初始化顺序:

  1. CMyWinApp theApp;  ----->这是程序中全局变量,它是唯一的,先于WinMain()函数构造完成,CWinApp中的某些成员变量因为theApp这个全局变量的诞生而得到配置和初值;
  2. theApp配置完,AfxWinAMain()登场,首先调用全局函数AfxGetApp()函数,取得指向theApp的指针;
  3. AfxWinInit(···)执行;
  4. pApp->InitApplication(),该函数一般不会被重写,所以调用的是CWinApp::InitApplication(),作用是初始化CDocManager类。【CDoManager类维护一个存放CDocTemplate指针的链表,CDocTemplate对象在InitInstance中创建并加入到链表中】
  5. pApp->InitInstance(),每个子类都要重写InitInstance(),因为在基类中无定义。其中开始创建框架窗口(p=new CMyFrameWnd();p->ShowWindow()//显示窗口;                           p->UpdateWindow()//这里发出一个WM_PAINT?暂时不知道干嘛)
  6. pApp->Run(),“程序的源头活水”,进入消息循环。子类没有重写Run(),所以调用(及依次调用)的是CWinApp::Run()·······>CWinThread::Run()······>CWinThread::PumpMessage()······>::TranslateMessage()和::DispatchMessage()消息处理

要想新创建一个程序直接继承CWinApp即可,生产app的流水线已经装配好。

 

2.2  CFrameWnd

框架窗口是指包括菜单、工具栏、状态栏和窗口客户区的整个应用程序的主窗口,相当于简单应用程序框架中所提到的主窗口。在MFC程序中,一般并不需要经常对CFrameWnd类进行操作,给View提供客户区和一些可操作的菜单等;

2.3 CDocument

对数据进行集中管理。将数据作为它的成员数据,能和磁盘交互,将数据写入磁盘或从磁盘读取出来(依靠Serialize()函数完成数据存取任务)

a.维护一个指向文档模板的指针,该指针可以用来设置标题,文档被删除时通知文档模板等

b.维护一个指向打开的视图链表的指针,用于视图和文档通信

2.4 CView

对Document中的数据展示和编辑。用OnDraw()函数展示数据,但应用程序的数据却存放在文档类中,视图类通过函数GetDocument()返回指向文档类的指针,通过这个指针就可以访问到文档类中的公有数据成员。

2.5 CDocTemplate 

文档模板类(CDocTemplate)的作用是集中管理CFrameWnd,CDocument和CView,将它们视为一个整体。同时还加载了菜单以及与菜单资源使用一个ID的快捷键等资源;

它一般派生出来个类:CMultiDocTemplate和CSingleDocTemplate,

3 一些重要的函数

*************************************标题错误:CView类中的函数以及功能*

4.MFC继承体系

 

========================================

http://blog.sina.com.cn/s/blog_62ce00c90100ld9h.html

========================================

原文地址:https://www.cnblogs.com/lp3318/p/6057886.html