1

我不一定要寻求代码帮助,而是寻求高级别的答案,这样我就可以自己研究解决方案。基本上,我有一个包含多个文档及其视图的 MDI 应用程序,我希望所有视图在我拥有的一个子框架中作为选项卡打开。问题是我的子框架在 OnCreateClient 方法中静态配置了一个带有两个视图的拆分器窗口,一个表单和一个列表视图。我想将此保留为启动应用程序时显示的默认选项卡。

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

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

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

谢谢。

4

1 回答 1

0

如果这有助于其他人,从我收集的内容来看,创建一个从 CChildFrame 派生的新子框架类或者只是将其用作新视图的框架是完全可以接受的。文档、框架和视图将在 initInstance 方法中添加到文档模板中。例如,假设您有一对三重奏(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); 
于 2012-11-14T23:09:09.220 回答