OnFileOpen与OnOpenDocument

本文深入解析了文件打开对话框的响应函数及其在文件选择、模板匹配、文档创建和加载过程中的作用,详细说明了如何通过重载特定函数进行自定义文件处理。包括从用户选择文件到文档初始化、加载文件内容直至文档状态更新的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OnFileOpen是菜单项的响应函数,由它具体调用那个对话框并完成文件的搜索和最终路径的确认。 
OnOpenDocument应该是在文件已经选好准备打开的时候触发的,这个时候应该可以处理文件内的具体数据了,所以你具体载入图像应该来重载这个函数,还有View的Update相关函数也要重载。

 

CWinApp::OnFileOpen调用CDocManager::OnFileOpen。 
CDocManager::OnFileOpen首先显示文件打开对话框(AFX_IDS_OPENFILE),然后调用CWinApp:: OpenDocumentFile(FileName)。 
CWinApp::OpenDocumentFile(FileName)调用CDocManager::OpenDocumentFile。 
CDocManager::OpenDocumentFile(LPCTSTR lpszFileName)遍历文档模板,对每个模板用MatchDocType(szPath,pOpenDocument)匹配文档类型。匹配时主要根据文件扩展名判断。若文件已经在某个文档中打开,则激活文档的第一个视图,否则用匹配的文档模板pBestTemplate->OpenDocumentFile(szPath)。 
CDocTemplate::OpenDocumentFile调用CDocument::OnOpenDocument打开文件。 
CDocument::OnOpenDocument打开文件,用DeleteContents删除现有文档内容,创建文件对应的CArchive 
对象loadArchive,Serialize(loadArchive)读文件内容,SetModifiedFlage(FALSE)。

 

CWinApp::OnFileOpen函数大概执行以下步骤: 
     1、提示用户选择文件; 
     2、选择一个匹配的文件模板; 
     3、创建文档、框架和视类; 
     4、打开文件; 
     5、将该文件和档案(CArchive)联系起来; 
     6、调用Serialize。 
     而OnFileNew不执行1、2、4、5几步,其他相同。具体的代码可以参考MFC/Src目录中的源程序。 
     如果你想实现OnFileOpen是为了读你自己定义的文件,一般不重载OnFileOpen,而是在Doc类的Serialize中写代码。如果不习惯CArchive类,也可以直接重载OnOpenDocument(它是Serialize的父函数)。这方面的例子可以参考VC++的diblook。 
     如果你只是想显示一个与众不同的选择文件的对话框,一般需要重载OnFileOpen。大致的步骤是: 
     void CYourApp::OnFileOpen() 
     CString newName; 
     if(!ShowYourDialog(newName)) 
     return; // 显示你的对话框 
     OpenDocumentFile(newName); 
     } 
     你只需要实现ShowYourDialog(newName)就可以了。

在读取图片的框架搭建中使用了MFC(Microsoft Foundation Classes)框架中 CMainFrame 类的实现代码。 MFC(Microsoft Foundation Classes),是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows的API。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。MFC实际上就是由微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。 界面算法流程概述: 1. 使用了MFC 框架下的主窗口类 CMainFrame的构造函数和创建窗口的函数。在构造函数中并没有做什么特别的事情,只有一个 TODO 注释。在 OnCreate 函数中,创建了一个工具栏和一个状态栏,并加载了资源文件中的工具栏和状态栏的图标和文本。如果创建失败,则会返回 -1。 2. 实现MFC 框架中主窗口类 CMainFrame。其中,OnCreate函数在主窗口被创建后被调用,OnCreate函数启用了主窗口的 docking 功能,并将工具栏固定到窗口顶部。而 PreCreateWindow() 函数则是在主窗口被创建前被调用,它可以修改主窗口的样式和属性。在这段代码中,PreCreateWindow() 函数并没有做任何修改,只是简单地返回 TRUE,表示主窗口可以被创建。 3. 运用了MFC 框架中 CImageProcessingApp 类的消息映射表,其中定义了两个命令的消息处理函数:OnAppAbout和 OnFileOpen。同时也继承了 CWinApp 中定义的三个命令:OnFileNew、OnFileOpen 和 OnFilePrintSetup 的消息处理函数。这些消息处理函数将在相应的命令被触发时被调用,可以在其中编写相应的处理代码。 4. 在 MFC 应用程序中启用 3D 控件。在 MFC 应用程序中,如果使用共享 DLL,则应调用 Enable3dControls()。但如果使用静态链接,则应调用 Enable3dControlsStatic()。_AFXDLL是一个预处理器宏,用于指示 MFC 应用程序是使用共享 DLL 还是静态链接 MFC 库。如果定义了 _AFXDLL,则表示使用共享 DLL。如果未定义 _AFXDLL,则表
最新发布
05-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值