很菜的问题,就是MDI界面的“文件/打开”,如何在系统生成的代码里加代码打开自己的文件

mygis 2000-12-13 03:54:00
我用VC的EXE WIZARD生成了MDI的程序框架,如何在系统生成的代码里加代码打开自己的文件,因为系统的文件/打开只是打开一个对话框,我不知在哪儿加上代码打开自己的文件并显示视图?
...全文
155 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcmfc 2000-12-13
  • 打赏
  • 举报
回复
重载吗?,在你从CWinApp的子类中创建一个跟原来函数一样的函数,在函数中在需要的地方在调用原函数,这是一个比较粗的理解,真正C++的重载给我说的又是一回事,重载后你要改一个原打开的入口,在你的CxxxApp.cpp中。
mygis 2000-12-13
  • 打赏
  • 举报
回复
to VCMFC:
如何重载,能讲讲具体的操作步骤吗?
AtCsdn 2000-12-13
  • 打赏
  • 举报
回复
其实没那么复杂,只须如此如此:
在InitInstance()函数中加入如下部分:
CCommandLineInfo cmdInfo;
cmdInfo.m_nShellCommand = CCommandLineInfo::FileOpen;
// 假定要打开的文件为在当前工作目录下的default.set.
CHAR* pWorkDir = _getcwd( NULL, _MAX_PATH );
CString sWorkDir = pWorkDir;
cmdInfo.m_strFileName = sWorkDir+"\\smc.set";
ParseCommandLine(cmdInfo);

则程序启动时自动为你打开文件 而不是 "New Document".
vcmfc 2000-12-13
  • 打赏
  • 举报
回复
这是一些说明:
改变MFC默认文档操作方式

当利用MFC编程时,其文档/视图结构为我们自动生成了文件新建,打开,保存的代码。这为我们省去了很多麻烦。但当操作对象是ODBC数据库等非文本文件时,问题出现了,如何改变其默认文档操作过程了?

经过分析MFC源代码可知。其默认菜单中的"新建""打开"消息分别对应CwinApp::OnFileNew()与CwinApp::OnFileOpen(),而这两个函数又直接调用CDocManager::OnFileNew与CDocManager::OnFileOpen。CDocManager::OnFileOpen的工作过程如下:

1. 调用CDocManager::DoPromptFileName,而DoPromptFileName的作用是显示文件打开对话框获得文件名。

2. 调用CWinApp::OpenDocumentFile(LPCTSTR lpszfileName)。

如果我们要改变文档打开方式,只需在CWinApp的继承类中重载DoPromptFileName与OpenDocumentFile即可。例如要改变默认的文件打开对话框。只需自建一个文件打开对话框,在重载的DoPromptFileName中调用他,获得一个文件名。

下面分析CWinApp::OpenDocumentFile。OpenDocumentFile的工作过程是:

1. 由参数lpszFileName的后缀判断用哪个文档模板。

2. 对该文档模板的的文档,视图,框架窗口作出调整。

3. 调用CDocTemplate::OpenDocumentFile

CDocTemplate::OpenDocumentFile是纯虚函数,由其派生类CsingleDocTemplate及CMultiDocTemplate实现,以CSingleDocTemplate::OpenDocumentFile举例说明之。

1. 判断有无现存文档,有则判断其是否已保存。

2. 新建框架窗口。

3. 由文件名路径判断该文件是否存在,存在则调用自定义的CMyDoc::OnOpenDocument,否则调用CMyDoc::OnNewDocument。

从以上分析我们可以对MFC默认的文档操作方式做多种改变,如改变文件打开保存方式,改变文件打开保存对话框等。

以上所示的各种源代码都可以从VC安装目录下的MFC\include及mfc\src子目录下得到。CWinApp类及CDocManager类CDocTemplate类及CsingleDocManager,CDocument类的头文件是afxwin.h,CWinApp类的源代码在AppCore.cpp中,CDocManager源代码在Docmgr.cpp中,CDocTemplate类及CSingleDocManager类的源代码分别位于doctempl.cpp与docsingl.cpp中。

总之,要学好MFC文档视图结构的最好方法就是多看看MFC源代码。
vcmfc 2000-12-13
  • 打赏
  • 举报
回复
重载CWinApp::OnFileOpen()函数

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧