有趣的问题,高手请进

a_kun 2001-09-23 07:04:17
我建了一个多文档的程序,它处理两种文件,因此具有两种doc/view,两种文件可以相互转换。当我把第一种文件转换成第二种文件时,我想立即打开一个第二种文件对应的窗口以便编辑。我该怎么办?

up有分,不够另外开帖子给分!!!
...全文
181 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hover 2001-09-24
  • 打赏
  • 举报
回复
这个可以用单文档多视实现,文档应更灵活一些。
whit_sindows 2001-09-24
  • 打赏
  • 举报
回复
补充:
我将工程的名称起名为MDoc.
extern CMyApp theApp;应为extern CMDocApp theApp;此句不是粘过来的,其余是。
whit_sindows 2001-09-24
  • 打赏
  • 举报
回复
我是这样做的
1:在CWinApp的派生类中加入一个数据成员和一个函数:

public:
CMultiDocTemplate* GetDocTemplate(void) const { return pDocTemp;}
private:
CMultiDocTemplate* pDocTemp;
2.在CWinApp的派生类的InitInstance()中记住所加的CMultiDocTemplate*:
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_MDOCTYPE,
RUNTIME_CLASS(CMDocDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMDocView));
AddDocTemplate(pDocTemplate);

pDocTemp = pDocTemplate; // 此句是加入的语句;
3.在所要打开文件的地方:
extern CMyApp theApp;

theApp.GetDocTemplate()->OpenDocumentFile(dlg.GetFileName());

voidman 2001-09-24
  • 打赏
  • 举报
回复
文档/视模板用CWinApp::AddDocTemplate函数之后就保存在CWinApp的一个链表里,可以用CWinApp::GetFirstDocTemplatePosition和CWinApp::GetNextDocTemplate来取的每一个模板的指针,每一个模板绑定了一资源号,绑定的资源可以是菜单,图标,快捷键和字符资源。其中字符资源可以有以下几种
CDocTemplate::windowTitle,
CDocTemplate::docName,
CDocTemplate::fileNewName,
CDocTemplate::filterName
CDocTemplate::filterExt
CDocTemplate::regFileTypeId
CDocTemplate::regFileTypeName
它们中间用\n格开,一般用CDocTemplate::filterName来区分不同的模板,当然也可以用别的,比如指定你的字符资源IDR_???是"\n\n\n???\n\n\n\n"(就写了CDocTemplate::filterName),然后可以用CDocTemplate::GetDocString来或的相应的字符,从而判断是不是需要打开的模板,打开一个模板实例用CDocTemplate::OpenDocumentFile(lpszFile),如果不关联文件lpszFile就是NULL
如果一个系统里同时有很多个模板,建议在第一个模板实例建立时才生成模板,可以节约资源,以下是代码例子
打开一个文档实例
CDocTemplate*pDocTemp;
POSITION p=AfxGetApp()->GetFirstDocTemplatePosition();
CString text;
BOOL HasFound=FALSE;
while(p!=NULL)
{
pDocTemp=AfxGetApp()->GetNextDocTemplate(p);
pDocTemp->GetDocString(text,CDocTemplate::filterName);
if(text==DOCFILTERNAME)//DOCFILTERNAME是一个宏,在头上定义,和
//你的字符资源里的字符串中的???保持一致
{
HasFound=TRUE;
break;
}
}//如果是没有找到就新开一个模板
if(!HasFound)
{
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_???,
RUNTIME_CLASS(C???Doc),
RUNTIME_CLASS(C???Wnd),
RUNTIME_CLASS(C???View));
AfxGetApp()->AddDocTemplate(pDocTemplate);
pDocTemp=pDocTemplate;
}
pDocTemp->OpenDocumentFile(NULL);//这里没有关联文件
a_kun 2001-09-23
  • 打赏
  • 举报
回复
to all:
<<深入浅出MFC>> 早看完n长时间了,里面没有怎么操作的。
xuyongg 2001-09-23
  • 打赏
  • 举报
回复
OpenDocument()
puppet 2001-09-23
  • 打赏
  • 举报
回复
看一看<<MFC深入浅出>>
feelinn 2001-09-23
  • 打赏
  • 举报
回复
有必要如此复杂吗?
如果实在要的话,就在转换完时更换一个模板.
a_kun 2001-09-23
  • 打赏
  • 举报
回复
没有人帮忙吗?
lpf 2001-09-23
  • 打赏
  • 举报
回复
gz
ray2_ls 2001-09-23
  • 打赏
  • 举报
回复
gz
a_kun 2001-09-23
  • 打赏
  • 举报
回复
OnFileOpen被截获后连文件都打不开了,我不知道后面隐藏地出现了什么参数。
xj_h 2001-09-23
  • 打赏
  • 举报
回复
自己调OnFileOpen不可以啊?
bobofu 2001-09-23
  • 打赏
  • 举报
回复
关注

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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