mfc创建文档视图过程
一、如何创建文档视图界面:
创建新的文档视图界面,只需要调用CDocTemplate::OpenDocumentFile(strpath)即可。(strpath为要打开的文档路径,如果是NULL,则生成新的文档)。
二、上面这个函数为何能够生成文档视图对象?
因为
1.它调用了CDocTemplate::CreateNewDocument()函数生成了CDocument对象;
2.它调用了CDocTemplate::CreateNewFrame()函数生成了CFrameWnd对象;
3.在生成文档框架的过程中又创建了CView对象。(因为文档框架是文档视图的父窗口,它们之间存在包含与被包含关系)
最终它生成了界面。
三、为何我在打开多文档软件时,系统自动给我生成了一个空白文档?如何不让它自动生成,我自己生成?
系统在开启时会默认调用CWinAPP:OnFileNew()这个响应函数(且这个函数是个虚函数),这个事件响应函数默认会调用CDocTemplate::OpenDocumentFile(strpath)函数生成一个空白文档。如果要取消默认,重载这个OnFileNew()函数,并且什么也不做即可。
如果你要自己生成,你得获取CWinApp内保存的文档模板对象,然后调用它的OpenDocumentFile(strpath)即可。
四、如何获取文档模板对象呢?
文档模板对象列表保存在CWinApp里的一个CDocManage的一个成员变量中。通过遍历这个成员遍历即可获取文档模板对象。
遍历由CWinApp::GetFirstDocTemplatePosition()和CWinApp::GetNextDocTemplate()函数得到。
五、CWinAPP和CDocTemplate都有OpenDocumentFile()函数,到底怎么回事?
前者实质是调用后者实现文档视图界面的创建。
CView、CDocument、CMDIChildFrame、CMDIDocTemplate、CDocManager、CWinApp之间的关系:
CView:
CDocument* GetDocument();//获取与视图相关的文档对象
CFrameWnd* GetParentFrame();//获取视图的框架(文档框架)
CDocument:
CDocTemplate* GetDocTemplate()//获取文档的文档模板
POSITION GetFirstViewPosition();
CView* GetNextView(position);//遍历文档相关的视图
参考文献:1.https://www.cnblogs.com/stevengerrard/p/3925422.html
2.https://blog.csdn.net/zhanghefu/article/details/2546601
mfc创建文档视图过程的更多相关文章
- MFC单文档视图程序简介
在视图应用程序中,应用程序的数据由文档对象代表,数据的视图由视图对象代表.MFC的Cdocument类是文档对象的基类,Cview类是视图对象的基类.应用程序的主窗口,其操作功能在MFC的Cframe ...
- mfc学习---文档视图架构
MFC的AppWizard可以生成三种类型的应用程序:基于对话框的应用.单文档应用(SDI)和多文档应用(MDI). 一般情况下,采用文档/视结构的应用程序至少应由以下对象组成: 1. ...
- MFC单文档视图中嵌入GLFW窗口
开始学习OpenGL由于有一段时间,但是glfw只有窗口区,虽然通过某种手段(移步这里)可以加入工具栏,但仍然无法作为一个标准的GUI,而直接在MFC或Qt里面使用OpenGL API感觉有诸多制肘, ...
- MFC单文档视图拆分窗口和相关链接
第一步:准备2个视图类(如CTViewOne, CTViewTwo) 第二步:在CMainFrame类的头文件中添加数据成员变量: //MainFrm.h protected: CSplitterWn ...
- 深入分析MFC文档视图结构(项目实践)
k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer ...
- MFC文档视图结构学习笔记
文档/视图概述 为了统一和简化数据处理方法,Microsoft公司在MFC中提出了文档/视图结构的概念,其产品Word就是典型的文档/视图结构应用程序 MFC通过其文档类和视图类提供了大量有关数据处理 ...
- MFC中 创建基于CFormView的文档视图程序
在MFC中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...
- MFC单文档多视图程序设计与Splitter拆分窗口
1. 创建不同的子frame. 在文档视图程序中 CMainFrame(class CMainFrame : public CMDIFrameWndEx) 继承自 CMDIFrameWnd (CMDI ...
- 如何优雅的写UI——(2)MFC下基于CFormView的文档视图程序
在MFC中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...
随机推荐
- 什么是Java Server Pages?
JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java servlet ...
- Openstack(Kilo)安装系列之环境准备(一)
本文采用VMware虚拟环境,使用CentOS 7.1作为openstack的基础环境. 一.基础平台 1.一台装有VMware的windows系统(可联网) 2.CentOS 7.1 64bit镜像 ...
- 【BZOJ2407/4398】探险/福慧双修 最短路建模
[BZOJ2407]探险 Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作 ...
- 【bzoj2226】[Spoj 5971] LCMSum 欧拉函数
题目描述 Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + LCM(n,n), where LCM(i,n) denotes the Leas ...
- Angular中的$cacheFactory的作用和用法
1.Angular中的$cacheFactory的作用: (1)put(key,value); 在缓存对象中插入一个键值对(key,value). (2)get(key); 在缓存对象中通过指定 ...
- linux下jdk多版本管理
linux下jdk多版本管理 项目开发中,不管是哪种语言都避免不了多个版本环境管理问题(本文虽然以jdk为例来写的,但不仅限于jdk),如何能做到快速的环境升级与切换确实是一件深思的事! 安装jdk ...
- bash编程基础
bash变量 变量命名: 1.不能使用程序中的关键字(保留字) 2.只能使用数字.字母和下划线,且不能以数字开头 3.要见名知义 变量类型: 数值型:精确数值(整数),近似数值(浮点型) 字符型:ch ...
- js城市联动选择器
<html> <head> <META charset="utf8"> <script type="text/javascrip ...
- JS表单提交
测试一: function submit(){var form1=document.getElementById("form1")form1.action="/manag ...
- MediaRecorder实现微信、QQ、人人、易信等语音录制功能工具:MediaUtilAPI
本文介绍使用MediaRecorder进行录制音频.录制视频学习,熟悉MediaRecorder执行流程,通过简单的Demo结合解释运行效果,最后封装MediaRecorder的API工具,实现常见比 ...