在MFC中引入了文档-视结构的概念,文档相当于数据容器,视相当于查看数据的窗口或是和数据发生交互的窗口。因此一个完整的应用一般由四个类组成:CWinApp应用类,CFrameWnd窗口框架类,CDocument文档类,CView视类。

  在程序运行时CWinApp将创建一个CFrameWnd框架窗口实例,而框架窗口将创建文档模板,然后有文档模板创建文档实例和视实例,并将两者关联。一般来讲我们只需对文档和视进行操作,框架的各种行为已经被MFC安排好了而不需人为干预,这也是M$设计文档-视结构的本意,让我们将注意力放在完成任务上而从界面编写中解放出来。

  在应用中一个视对应一个文档,但一个文档可以包含多个视一个应用中只用一个框架窗口,对多文档界面来讲可能有多个MDI子窗口。每一个视都是一个子窗口,在单文档界面中父窗口即是框架窗口,在多文档界面中父窗口为MDI子窗口。一个多文档应用中可以包含多个文档模板,一个模板定义了一个文档一个或多个视之间的对应关系。同一个文档可以属于多个模板,但一个模板中只允许定义一个文档。同样一个视也可以属于多个文档模板。

接下来看看如何在程序中得到各种对象的指针:

● 全局函数AfxGetApp可以得到CWinApp应用类指针 
● AfxGetApp()->m_pMainWnd为框架窗口指针 
● 在框架窗口中:CFrameWnd::GetActiveDocument得到当前活动文档指针 
● 在框架窗口中:CFrameWnd::GetActiveView得到当前活动视指针 
● 在视中:CView::GetDocument得到对应的文档指针 
● 在文档中:CDocument::GetFirstViewPosition,CDocument::GetNextView用来遍历所有和文档关联的视。 
● 在文档中:CDocument::GetDocTemplate得到文档模板指针 
● 在多文档界面中:CMDIFrameWnd::MDIGetActive得到当前活动的MDI子窗口

  一般来讲用户输入消息(如菜单选择,鼠标,键盘等)会先发往视,如果视未处理则会发往框架窗口。所以定义消息映射时定义在视中就可以了,如果一个应用同时拥有多个视而当前活动视没有对消息进行处理则消息会发往框架窗口。

  文档用来保存数据,视图用来进行交互,文档和视图都由框架产生.

MFC 文档 视图 框架窗口间的关系 和消息传送规律相关推荐

  1. C++--深入分析MFC文档视图结构(项目实践)

    1 必备基础知识概述 1.1 MFC 文档视图结构程序结构总揽 当我们使用 MFC AppWizard 生成一个 MFC 程序,选用所有默认的设置(当然也是 Multiple Documents ,本 ...

  2. 深入理解文档/视图框架体系_九宫格项目开发感悟

    1.项目起源以及采用文档/视图框架体系缘由 我们整天都在说:文档保存项目的数据并处理项目上的数据:视图通过关联获得文档的数据并进行可视化:主窗口框架接收外部事件消息并进行消息分配.这句口头禅感觉接触过 ...

  3. 深入分析MFC文档视图结构(项目实践)

    文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer模式的具体实现框架之一,Document/View Architecture通过将数据和其表示分 ...

  4. 深入浅出MFC文档/视图架构之文档

    1.文档类CDocument 在"文档/视图"架构的MFC程序中,文档是一个CDocument派生对象,它负责存储应用程序的数据,并把这些信息提供给应用程序的其余部分.CDocum ...

  5. 深入浅出MFC文档/视图架构之文档模板

    在"文档/视图"架构的MFC程序中,提供了文档模板管理者类CDocManager,由它管理应用程序所包含的文档模板.我们先看看这个类的声明: / // CDocTemplate m ...

  6. 玩转MFC文档视图架构编程1——深入浅出MFC文档/视图架构之基本概念深入浅出MFC文档/视图架构之文档

    原创地址: 深入浅出MFC文档/视图架构之基本概念 http://iis.xrtvu.com/Tech/ShowArticle.asp?ArticleID=276 深入浅出MFC文档/视图架构之文档模 ...

  7. wxWidgets:文档/视图框架

    wxWidgets:文档/视图框架 wxWidgets:文档/视图框架 wxDocument 概览 wxView 概览 wxDocTemplate 概述 wxDocManager 概述 文档/视图框架 ...

  8. MFC文档/视图结构体系及SDI回顾(2)

    1.牢骚发在最前面 三件事情杂糅到了一起弄得我彻夜未眠. 香港大学的Offer不小心丢在了垃圾邮箱里,却阴差阳错的来了清华.平台是一方面,当时谈好的港府奖学金也就此泡汤,这笔钱是我急需的. 惊闻噩耗, ...

  9. OpenCV+MFC文档视图结构 构建简易PS图像处理软件

    简介 本文介绍了基于OpenCV图像处理库的MFC框架下的图像处理程序构建方法. 本项目依赖OpenCV库4.1.0版本,构建和编译由VS2017完成. 程序目录 simPS2.h/simPS2.cp ...

最新文章

  1. DJango操作MySQL数据库
  2. 得力助手 消防员的 消防机器人_消防机器人:消防员的“得力助手”(科技大观)...
  3. (转载)mysql 用drop和delete方法删除用户的区别
  4. 制作 jvm 火焰图
  5. 或是独体字吗_独体字
  6. 什么是计算机科学中的“本体论”
  7. QQ音乐、网易云音乐、虾米音乐们的音乐社区暗战
  8. 739. 每日温度/C++
  9. 社交帝国的至暗时刻,Facebook“非死不可”?
  10. C# xml格式字符串 反序列化和序列化
  11. matlab 插值生成曲面,[转]Matlab曲面拟合和插值
  12. dna编码库_DNA编码化合物库,新药筛选划时代的变革
  13. linux cp命令的-f 参数
  14. 海思Hi3536移植QT5.9.8教程
  15. Oracle数据库cmd命令基本命令
  16. word中如何在表格上方加入一行以及英文如何设置自动断字
  17. Dynamics CRM 2016 的新特性
  18. 让生命孤独的怒放——《晚安 北京》读后感
  19. 商标行业有什么发展前景
  20. 无障碍交互设计翻译及感想

热门文章

  1. 二级计算机选择题知识点资源,计算机省二级选择题.txt
  2. 直接请求接口_【分享】接口是什么?实现原理的是什么?
  3. mysql死锁检测算法_MySQL InnoDB如何应付死锁
  4. 函数头模板_Python新手爬虫,爬取PPT模板
  5. github private链接访问_如何判定一段内存地址是不可访问的?
  6. connot+connect+mysql+127.0.0.1_无法远程连接 MySQL 的解决方法
  7. linux系统 设置网卡ping通主机连上外网
  8. Mysql安装的目录结构详解
  9. animate改变背景颜色_3D MAX2016视口背景设置里各参数的含义详解 - 3dmax基础操作入门教程-3dmax材质教程,3d材质贴图教程参数,vray材质参数,3dmax贴图教程...
  10. 扫地机器人水箱背景_家友扫地机器人拖地水箱配件(米家扫地机器人1代版)体验(Case Closed)...