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中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...
随机推荐
- cobbler pxe-menu
对应的文件在 /var/lib/tftpboot/pxelinux.cfg下 如果profile的pxe-menu设置为1的话,就可以默认显示在menu上了.可以手动选择要下发哪一个profile. ...
- 中国程序员如何去 Facebook 工作?
1.在Facebook,可以选择哪里工作? Facebook 在内地确实没有 Office ,但可以在https://www.facebook.com/careers/?ref=pf#location ...
- spring;maven;github;ssm;分层;timestamp;mvn;
[说明]本来还想今天可以基本搭建一个合适的ssm环境呢,结果发现,,太特么复杂了,网上的例子有好多,看了好多,下面的评论或多或少都有说自己运行产生问题的,搞的我也不敢好好下载运行 [说明]没办法,将目 ...
- iostat命令简单使用
1.iostat使用范围 iostat命令可以生成3种类型的报告: (1)CPU使用情况的报告 (2)设备使用情况的报告 (3)网络文件系统(NFS)使用情况的报告 2.每种报告的格式说明 关于CPU ...
- 【python】-- 函数、无参/有参参数、全局变量/局部变量
函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函 ...
- Java语言实现简单FTP软件------>辅助功能模块FTP站点管理的实现(十二)
1.FTP站点管理 点击"FTP站点管理"按钮,弹出对话框"FTP站点管理",如下图 1) 连接站点 在FTP站点管理面板上选好要连接的站点,点击"连 ...
- Linux c编程:线程属性
前面介绍了pthread_create函数,并且当时的例子中,传入的参数都是空指针,而不是指向pthread_attr_t结构的指针.可以使用pthread_attr_t结构修改线程默认属性,并把这些 ...
- QT里面的delay使用
void delay() { QTime dieTime= QTime::currentTime().addSecs(1); while( QTime::currentTime() < dieT ...
- Linux基础系列:常用命令(6)_nfs服务与nginx服务
NFS介绍: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统 ...
- 动态创建selectjs 操作select和option
1.动态创建select function createSelect(){ var mySelect = document.createElement("select"); myS ...