在MFC MDI应用程序中共享一个子框架时,创建不同视图的最佳实践是什么?

问题描述 投票:1回答:1

我不一定要寻求代码帮助,而是寻求一个高级答案,以便我自己研究解决方案。 基本上,我有一个包含多个文档及其视图的MDI应用程序,我希望所有视图以选项卡的形式在我拥有的一个子框架中打开。 问题是我的子框架在OnCreateClient方法中由一个拆分器窗口静态配置,该拆分器窗口具有两个视图(窗体和列表视图)。 我想将其保留为启动应用程序时出现的默认选项卡。

我有自己的文档模板的第三个视图(editview),我希望能够将其作为单独的选项卡打开。 我将有其他这样的观点。 解决此问题的最佳方法是什么?

我是否需要为每个视图创建单独的子框架? 如果创建单独的子框架,我会失去“标签”功能吗?

还是我必须修改子框架的OnCreateClient方法以测试哪个文档模板是当前文档模板并为该文档模板创建视图? 我想知道你们中一些经验丰富的程序员是如何做到的或愿意做到的。

谢谢。

visual-c++ mfc views mdi documents
1个回答
0
投票

万一这对其他人有所帮助,从我收集的数据来看,完全可以接受创建一个从CChildFrame派生的新子框架类,或者仅将其用作新视图的框架。 doc,框架和视图将通过initInstance方法添加到doc模板中。 例如,假设您有一对三人组合(2个文档,2个视图,2个框架):

pDocTemplate = new CMultiDocTemplate(IDR_testappTYPE,
    RUNTIME_CLASS(CMydoc1),
    RUNTIME_CLASS(CMyframe1), 
    RUNTIME_CLASS(CMyview1));
if (!pDocTemplate)
    return FALSE;
AddDocTemplate(pDocTemplate);

pDocTemplate2 = new CMultiDocTemplate(IDR_testappTYPE,
    RUNTIME_CLASS(CMydoc2),
    RUNTIME_CLASS(CMyframe2), 
    RUNTIME_CLASS(CMyview2));
if (!pDocTemplate2)
    return FALSE;
AddDocTemplate(pDocTemplate2); 

如果您添加另一个具有不同子框架的三重奏,因为此新框架不使用上述分离器,则可以这样做。

pDocTemplate3 = new CMultiDocTemplate(IDR_mditest3TYPE,
    RUNTIME_CLASS(CMydoc), //same doc
    RUNTIME_CLASS(CMyframeWithoutSplitters), //new frame
    RUNTIME_CLASS(CMyview3)); //new view
if (!pDocTemplate3)
    return FALSE;
AddDocTemplate(pDocTemplate3); 
© www.soinside.com 2019 - 2024. All rights reserved.