MFC多文档OpenDocumentFile的一个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC多文档OpenDocumentFile的一个问题相关的知识,希望对你有一定的参考价值。

OpenDocumentFile参数是一个文件名
我现在做的都是数据库的内容,因为使用了向导创建的Visual Studio样式OpenDocumentFile可以打开一个标签,我使用这个函数打开的时候如果文件不存在就会报错,请问如何修改
或者如何调用API,使它能创建一个窗口出来

参考技术A 你可以在你的文档类中改写OnOpenDocument,return TRUE就可以了追问

文档类有这个方法吗?

本回答被提问者采纳

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多文档OpenDocumentFile的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

CWinApp::OpenDocumentFile 创建一个新窗口

从单个文件打开多个文档

mfc 单文档 多文档 对话框 区别

mfc 多文档中怎样动态添加菜单项?

mfc中MDI模式下实现单文档多视图多窗口

猎豹MFC--书籍推荐:基于对话框的MFC应用程序《VisualC++实例精通》单文档多文档多顶级文档《MFCWindows程序设计》