MFC MDI应用程序中文档的多视图

MFC MDI应用程序中文档的多视图,mfc,multiple-views,Mfc,Multiple Views,我希望在我的MDI MFC应用程序中有一个文档的多个视图。为了做到这一点,我的应用程序类的InitInstance有以下代码 m_pMainTemplate = new CMultiDocTemplate(IDR_OpenCVTestTYPE, RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CImageView)); if (!m_pMa

我希望在我的MDI MFC应用程序中有一个文档的多个视图。为了做到这一点,我的应用程序类的InitInstance有以下代码

m_pMainTemplate = new CMultiDocTemplate(IDR_OpenCVTestTYPE,
    RUNTIME_CLASS(CMyDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CImageView));
if (!m_pMainTemplate)
    return FALSE;
AddDocTemplate(m_pMainTemplate);

m_pHistTemplate = new CMultiDocTemplate(IDR_OpenCVTestTYPE,
    RUNTIME_CLASS(CMyDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CHistogramView));
if (!m_pHistTemplate)
    return FALSE;
AddDocTemplate(m_pHistTemplate);
但当我启动应用程序时,它会不断询问用户想要在两个文档中选择哪个文档。当然,这些文件是同一类的。有解决这个问题的想法或提示吗

更新:我解决了这个问题,为第二个视图设置了单独的菜单,并像这样覆盖了OnFileNew

 void CMyApp::OnFileNew()
 {
    // TODO: Add your command handler code here
    m_pMainTemplate->OpenDocumentFile(NULL);
 }

不要添加第二个模板

这显示了如何为单个文档创建多个视图

编辑:一种可能是在打开必须具有备用视图的子框架之前修改文档模板

m_pMainTemplate->m_m_pNewViewClass = RUNTIME_CLASS(CHistogramView);

然后,您可能应该在打开任何类型的子框架之前在模板中设置视图,以确保每个子框架打开时模板都处于预期状态。

如果您仔细阅读本文,您会注意到它是用于SDI的。我的是MDI。这些技术可以适应MDI:只需让用户打开一个新的子帧并替换一帧一帧的视图,我也这么认为,但在MDI中,为什么要切换视图?实际要求是同时显示两个视图。仅供参考:我已经尝试过了,但这对MDI不起作用。您希望每个子帧显示一个视图,对吗?因此,您可以在框架中切换视图,这应该会产生替代视图。我只是通过简单的更改解决了我的问题。我更新了我的答案。无论如何,感谢您的努力。在您的情况下,覆盖OnFileNew是正确的方法。