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中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...
随机推荐
- Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)
转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...
- centos7.0 增加/usr分区的容量减少home分区的大小
把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home:tar cvf /tmp/home.tar /home #备份/homeumount /home ...
- EhCache 集群 配置(RMI方式)
这里先说明下环境:JDK1.6.ehcache-core-2.1.0.jar.Tomcat6.Spring3.0.2.使用的是RMI方式配置集群的,这里先吐槽下遇到的情况,在搜相关知识的时候发现到处都 ...
- 软件测试之BUG分析定位概述(QA如何分析定位BUG)【转自 https://blog.csdn.net/kaka1121/article/details/51538979】
你是否遇到这样的场景? QA发现问题后找到DEV说: 不好了,你的程序出问题了! DEV(追查半小时之后): 唉,是你们测试环境配置的问题 唉,是你们数据不一致 唉,是你们**程序版本不对 唉,是** ...
- VC++MFC对话框程序中给对话添加背景图片
VC对话框怎么显示背景图片呢.在MFC中实现背景图片,不像C#应用程序那么简单.今天就和朋友们说说如何在VC界面中设置背景图片 ^_^ 工具/原料 Visual C++ 2010 方法一:用Pic ...
- 九度OJ 1182:统计单词 (计数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3920 解决:1443 题目描述: 编一个程序,读入用户输入的,以"."结尾的一行文字,统计一共有多少个单词,并分别输出 ...
- iOS 多线程(队列、任务、串行、并行、同步、异步)
- PHP安全编程之php.ini配置
1.register_globals=On <?php//ex1.php if(check_admin()) { $is_admin=true; } if($is_admin) { ...
- valuestack,stackContext,ActionContext.之间的关系以及action的数据在页面中取得的方法
转自:http://blog.csdn.net/quechao123/article/details/4406148 1.三者之间的关系如下图所示: 2.action的数据在页面中取得的方法 在st ...
- jQuery:[1]实现图片上传并预览
jQuery:[1]实现图片上传并预览 原理 预览思路 1.当上传对象的input被触发并选择本地图片之后获取要上传的图片对象的URL: 2.把对象URL赋值给实现写好的img标签的src属性 Fil ...