在多文档中如何实现多个不同的子窗口,并且如何在文档类中保存不同view的数据?在下从未编过多文档程序,请大虾们多多指教!!欢迎大家帮忙UP!!谢谢!! Try create two FormView class, when you open a childframe, insert the formview that you want. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to:Julienjut(秋水) ->能不能具体到实现的代码to:tony1978(突击召唤师) ->能否具体一点,并且是否要建立哪个什么的模版? 你可以参考Winapp提供的InitInstance()中的如下代码,新建不同的文档摸板, CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_YONGDLTYPE, RUNTIME_CLASS(CYouAppDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CYouAppView)); AddDocTemplate(pDocTemplate);然后使用: ps=app->GetFirstDocTemplatePosition(); CDocTemplate* doct=app->GetNextDocTemplate(ps);//得到文档模版 去得到不同的文档摸板, to:ebigtiger(dadao) 非常感谢您,请问我自己定义的模版也是要加到CMyApp里面吗? 当然要加了,我昨晚写了一个关于文档/视的帖子,见http://www.csdn.net/expert/topic/299/299320.shtm to:voidman() 哥们,我越看越复杂,能不能简单的描述一下,我只想在菜单上有两个按钮,一个叫做数据察看,另一个是图形分析,两个按钮对应不同的view,为什么会有这么多的艰难? 看看Visual C++ 技术内幕,上面有一个很好的例程,很简单,要不我明天给一个,现在我得下班罗。 多谢,给到我的油箱吧:[email protected] 我只想在菜单上有两个按钮,一个叫做数据察看,另一个是图形分析,两个按钮对应不同的view,为什么会有这么多的艰难? 文档/视模板是代表一个前台显示,后台分析保存数据的集合体,它的每一个实例具体就是开出来的窗口,比如"数据察看"模板,可以有"数据察看-1"窗口,“数据察看-2"窗口,这些窗口都是用"数据察看"模板产生的,如果你要打开"图形分析"的窗口,应该再建立一个"图形分析"的模板。文档,视,窗口,资源每个实例都有一套,所以不是你理解的"两个按钮对应不同的view"。其实程序不一定要用文档/视结构,不过一般的MDI程序用是没有问题的 兄弟,好像深入浅出MFC这本书中有相关的例子!搞个电子版看看!是老候写的 其实是使用文档中的m_viewList,对每一个文档(使用一个连表保存)中的每一个视图操作、存储即可 硬盘里已经没有了,只好重做一个MDI多视图演示程序to TangDynasty(用少林武功编程序!?有搞头吗?)这只是演示,不是完整程序,说明问题就行了源程序已经上传,下载地址http://www.csdn.net/filebbs/read_topic.asp?id=60829.4K 实际上就是每一块都要有自己的Doc类,View类以及Frame类,这样就可以任意生成子窗体,任意对子窗体进行操作(比如加控件等)。向导生成程序后,首先对第二个模块添加Doc类,View类以及Frame类这三个类,然后在文档模版中注册,然后在String Table中设置,然后在菜单中设置激活该模块的代码,就可以了,以后对该模块的所有操作就象是在SDI的程序中那样在自己的Doc类,View类以及Frame类中作。其它模块也同理,你可以加任意多个。具体代码:步骤如下:(以添加CtryDoc,CtryView,CtryFrame为例)1。添加三个类(注意如是FormView的,还需要添加一个基于Formview的对话框,并且视类继承CFormView);2.添加一个Menu(第二个模块要用);名为IDR_TRYTYPE3.在App的InitInstance()中注册:代码放在主注册模版的下面 CMultiDocTemplate* pTakeTemplate;pTakeTemplate = new CMultiDocTemplate(IDR_TRYTYPE,RUNTIME_CLASS(CtryDoc),RUNTIME_CLASS(CtryFrame), RUNTIME_CLASS(Ctryview));AddDocTemplate(pTakeTemplate);4。在String Table 中添加new string:ID为IDR_TRYTYPE,Caption为\ntry\ntry\n\n\ntry.Document\ntry Document,其他名字只需把try换一下名5。如何激活:可以利用文件菜单中新建命令激活,也可以用代码:POSITION curTemplatePos = GetFirstDocTemplatePosition(); while(curTemplatePos != NULL){ CDocTemplate* curTemplate =GetNextDocTemplate(curTemplatePos);CString str;curTemplate->GetDocString(str, CDocTemplate::docName);if(str == _T("try")) //其他模版只需把try换名{curTemplate->OpenDocumentFile(NULL);return;} }然后就可以用了那三个类的基类是CDocument,CFormView(视类随便),CMDIChildWnd 非常感谢各位的帮助,在各位的帮助下,这个问题在下终于明白了。在csdn上结识了众多的好友,给了我无私的帮助。在下准备将此贴再加多150分,用300分买单来感谢各位的积极的参与和大力的支持。衷心的谢谢你们! 请教关于获取注册表里的值的相关问题,求指导! C++制作的BHO,怎么使得BHO在每个网页打开的时候添加javasript脚本 界面显示异常,可能是屏幕刷新问题 用 LoadResource 装入的资源如何释放? 请问如何用VC截获数据包啊? 如何在程序执行中改变控件的颜色 30分求怎样在双击文件夹时弹出一个密码输入框控制文件夹的访问 从硬盘安装vs.net的问题 自己想写一个光盘刻录程序 请问哪里可以找到vc自带的各种ActiveX控件的使用帮助文档?? ListView的使用???谁能解决,100分送上 swf文件格式?
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_YONGDLTYPE,
RUNTIME_CLASS(CYouAppDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CYouAppView));
AddDocTemplate(pDocTemplate);
然后使用:
ps=app->GetFirstDocTemplatePosition();
CDocTemplate* doct=app->GetNextDocTemplate(ps);//得到文档模版
去得到不同的文档摸板,
我昨晚写了一个关于文档/视的帖子,见
http://www.csdn.net/expert/topic/299/299320.shtm
哥们,我越看越复杂,能不能简单的描述一下,我只想在菜单上有两个按钮,一个叫做数据察看,另一个是图形分析,两个按钮对应不同的view,为什么会有这么多的艰难?
搞个电子版看看!是老候写的
这只是演示,不是完整程序,说明问题就行了
源程序已经上传,下载地址
http://www.csdn.net/filebbs/read_topic.asp?id=608
29.4K
向导生成程序后,首先对第二个模块添加Doc类,View类以及Frame类这三个类,然后在文档模版中注册,然后在String Table中设置,然后在菜单中设置激活该模块的代码,就可以了,以后对该模块的所有操作就象是在SDI的程序中那样在自己的Doc类,View类以及Frame类中作。
其它模块也同理,你可以加任意多个。
具体代码:
步骤如下:(以添加CtryDoc,CtryView,CtryFrame为例)
1。添加三个类(注意如是FormView的,还需要添加一个基于Formview的对话框,并且视类继承CFormView);
2.添加一个Menu(第二个模块要用);名为IDR_TRYTYPE
3.在App的InitInstance()中注册:代码放在主注册模版的下面
CMultiDocTemplate* pTakeTemplate;
pTakeTemplate = new CMultiDocTemplate(
IDR_TRYTYPE,
RUNTIME_CLASS(CtryDoc),
RUNTIME_CLASS(CtryFrame),
RUNTIME_CLASS(Ctryview));
AddDocTemplate(pTakeTemplate);
4。在String Table 中添加new string:ID为IDR_TRYTYPE,Caption为\ntry\ntry\n\n\ntry.Document\ntry Document,其他名字只需把try换一下名
5。如何激活:
可以利用文件菜单中新建命令激活,也可以用代码:
POSITION curTemplatePos = GetFirstDocTemplatePosition();
while(curTemplatePos != NULL)
{
CDocTemplate* curTemplate =
GetNextDocTemplate(curTemplatePos);
CString str;
curTemplate->GetDocString(str, CDocTemplate::docName);
if(str == _T("try")) //其他模版只需把try换名
{
curTemplate->OpenDocumentFile(NULL);
return;
}
}
然后就可以用了那三个类的基类是CDocument,CFormView(视类随便),CMDIChildWnd
友,给了我无私的帮助。在下准备将此贴再加多150分,用300分买单来感谢各位的积极的参与和
大力的支持。衷心的谢谢你们!