一、文档视图关系示意图

1.可见部分其实就是一页一页, 比如一本书就有很多页,总不能同时显示很多页吧

2直方图显示文档中,可视部分的第一部分

3.使用框架窗口2,视图2显示,也就是说一个Document可以对应多个视图(View)

4.文档可视部分的第二部分,它可能就是对应一个表格,就是视图3和框架窗口3.

5.第二部分数据也可以用折线图来显示,

6.最重要的是用户可以在视图3里输入,视图3将用户输入的数据翻译,然后存储到文档中去.

一个文档对象他对应多个视图, 有些视图是纯粹显示用的, 有些则是处理接收用户输出,

用户的数据,往往要赋予一定的结构才能存储到Document里面,

二、CDocument类

这个类虽然比较简单,但是大部分工作都在这个类里,因为数据怎么存用什么结构存储

包括,数据的组织形式,完全是需要在文档类里完成。

  1. 标题方法 GetTitle, SetTitle

  2. 路劲名方法GetPathName SetPathName 用户存储文档的路劲+文档名+扩展名

  3. 取得文档模板 GetDoctemplate

  4. 文档标志修改IsModified  SetModifiedFlag 设定修改的标志(文档被修改了) SaveModified

这时候你关闭文档的时候, 根据这个标志会弹出一个对话框,提示用户是否保存修改后的数据.

5.关联视图方法

a.AddView为文档添加视图,临时, 用于特殊设计,

b.RemoveView从文档中删除视图,

c.OnChangeViewList 文档通过一个内部的视图list来进行管理,

OnChangeViewList 就是这个列表发生改变的时候,

d.GetFirstViewPosition 获取列表头  GetNextView 获得下一个  可用来遍历

e.UpdateAllViews 更新所有数据,通知文档类,通知他管理的所有视图,去更新显示,

视图类直接调用的时候,可以把视图作为指针传递进去,Document挨个调用View类型

OnUpdate方法,这个方法会把视图指针传进去, 因为所有的视图,包括发起更新操作

的视图,都会响应这个方法, 发起命令的只需要判断 如果是自己,则直接跳过,自己已经更新过了.

频繁调用可能会造成Windows性能下降.

2.可重写的事件

DeleteContents 删除整个的内容

OnNewDocument 新建文档的时候调用

OnOpenDocument 打开文档的时候调用

OnSaveDocument 保存文档的时候

OnCloseDocument 关闭文档的时候

三、CDialog类

  1. Windows中对话框是应用程序创建的用于获取用户定制输入的一个临时窗口

一般具有WS_POPUP风格,会包含若干各种类型的控件.

2.在MFC中对话框按照消息处理的方式分为两大类

模态对话框--要求用户必须提供信息或取消该对话框,应用程序才继续运行

非模态对话框--运行用户提供信息并继续操作前一任务,

3.对话框必须 使用对话框资源 进行创建

资源实际就是一种定制的资源脚本生成的数据,由资源编译器编译为纯

二进制形式后连接进可执行文件中

三、CDC类

  1. CDC 其他DC的积累,定义设备环境对象,提供了在显示器,打印机或窗口

元素上画图的方法  默认坐标系: 自定义

2.CPaintDC 代表窗口绘制区域的设备环境,一般会比显示区域大,通常用在WM_PAINT消息中使用

默认坐标系: 默认为客户区坐标系, 可以改变

3.CClientDC 代表客户区的设备环境,可以再任何需要再客户区绘制的时候使用

默认坐标系: 客户区坐标系

4.CWindowDC 代表整个窗口的设备区域,包括非客户区,为在非客户区提供了基本支持

默认坐标系: 屏幕桌面坐标系

5.CMetaFileDC 元文件设备区域,用于支持Windows源文件绘制

默认坐标系: 自定义

转载于:https://blog.51cto.com/12158490/2096666

MFC体系结构(3)相关推荐

  1. MFC类结构-1、CObject类

    CObject是"MFC类之母",由它派生出庞大的类体系.CObject并不是对整个类体系进行语义抽象的结果,它只为所有派生类定义几种功能特性.由于这几项功能应用于MFC的大部分类 ...

  2. MFC的Application Wizard所生成的各种文件功能

    当我们用Application Wizard生成一个新的项目时,MFC会自动为我们产生不少的程序文件,那么这些文件都是干什么用的呢? 其实生成项目完成之后,我们会在项目目录里面发现一个readme.t ...

  3. 从C++起步到MFC实战VC++软件工程师高端培训(服务器端开发方向)学习课程

    从C++起步到MFC实战VC++软件工程师高端培训(服务器端开发方向)学习课程 主要内容: 本部分是您成为VC++软件工程师必备的阶段,如果您没有任何基础,学习C++能快速让您进入编程领域,建议配合书 ...

  4. VS2008 MFC类库精讲:使用MFC V9.0类库及新版Office Fluent UI实现CAD系统

    学习地址:http://***/goods.php?id=164 内容简介:    本培训视频主要通过带领学员实现一个CAD系统(TinyCAD),从而学习和掌握在VS2008 IDE环境中MFC的基 ...

  5. 如何优雅的写UI——(1)MFC六大核心机制-程序初始化

    很多做软件开发的人都有一种对事情刨根问底的精神,例如我们一直在用的MFC,很方便,不用学太多原理性的知识就可以做出各种窗口程序,但喜欢钻研的朋友肯定想知道,到底微软帮我们做了些什么,让我们在它的框架下 ...

  6. 从C++起步到MFC实战VC++软件工程师高端培训视频教程

    从C++起步到MFC实战VC++软件工程师高端培训视频教程 本课程从C++起步.用户无需任何计算机基础,只需要懂的基本的电脑操作,既可学习本课程,本课程适合在校大学生,在职人员等,通过本课程的学习,学 ...

  7. 《C++语言基础》网络课程主页

    返回 贺利坚教学链接 本课程是在大学的实体课程基础上建设的一门网络课程,将我在教学中建设的资源,让更多的人能够用到. 课程链接是:点击打开链接 同步实体课在 点击打开链接,那里有92名同时学习的&qu ...

  8. [COM/ATL]组件、对象、MFC、ATL的区别

    组件(Component)和对象(Object)之间的区别 先明确组件(Component)和对象(Object)之间的区别.组件是一个可重用的模块,它是由一 组处理过程.数据封装和用户接口组成的业务 ...

  9. 【转】MFC与.NET的区别

    1.     MFC是在API的基础上封装出来的一个类库,给C++程序员在Windows上快速开发用的. .Net类库是在Windows非托管API的基础上封装出来的一个托管类库,给程序员在各种Win ...

最新文章

  1. 别拒绝生命中偶尔的初恋
  2. c# typeof() 和 GetType()的区别
  3. 二叉树的遍历:先序 中序 后序遍历的递归与非递归实现及层序遍历
  4. C#求空间两点之间的距离
  5. php数组 函数,PHP array_uintersect_uassoc() 函数
  6. Delphi多媒体设计之TMediaPlayer组件(二)
  7. Selenium frame 切换处理
  8. MySQL 半同步复制+MMM架构
  9. tomcat 无法关闭 :8005端口未启动
  10. 计算机的主要元器件介绍,计算机基础电子元器件介绍.ppt
  11. 如何将工业现场模拟信号无线传输到PLC/主机?
  12. PaddleOCR+OpenCV实现中英文识别
  13. 无废话ExtJs 入门教程七[登陆窗体Demo:Login]
  14. python tkinter滚动条不起作用_python – 水平滚动条在Tkinter中不起作用
  15. 中考计算机考试评分标准,2016年中考英语作文的评分标准及评分细则(最新)
  16. Cocos2d-x游戏开发实例详解3:无限滚动地图
  17. Windows DNS服务器策略
  18. java如何判断回文数
  19. HTML5新特性小结
  20. ubuntu系统20.4搭建c语言环境,ubuntu 20.04 中文环境和英文环境切换

热门文章

  1. VMware Player 12.5.0 中文免费版
  2. JSP中鼠标禁用代码
  3. app测试和app接口测试要点详解
  4. 比postman好用10倍的接口调试工具ApiPost
  5. JMETER 用户自定义的变量
  6. dbutils mysql_使用DBUtils控制mysql事务
  7. maven 依赖版本管理— dependencyManagement
  8. gitglone 指定分支_安装说明 · harryxu/gitube Wiki · GitHub
  9. 年薪20万的前端工程师成长线路指南!
  10. 如何自学计算机前端开发?精细的自学步骤是什么样的?