如何在 MFC 中使用文档/视图体系结构



我仍在MFC中开发数据采集程序,并且无法使用文档/视图体系结构。 基本上,我希望我的应用程序有几个窗口。 一个用于显示从高速摄像机录制的视频,另一个具有显示来自DAQ系统数据的绘图,另一个用于配置摄像机和DAQ等的控件。

所以,实际上我有很多无模式窗口,每个窗口显示一部分数据,通常来自不同的来源。 现在,通过并使用应用程序向导,我对文档/视图的东西感到困惑,即使我可以关闭它,它在技术上也没有关闭。 现在撇开这一点不谈,我尝试打开无模式对话框和 FormView 都没有成功。 大多数情况下,我只是不知道如何打开新视图,文档并没有真正的帮助。 我已经能够从功能区按钮命令打开模态绘图对话框,并将其标记为成功,但不完全是我需要的。

那么,是否有人在使我的应用程序适合 Doc/View 体系结构或从另一个应用程序中打开无模式对话框或 FormView 方面有有用的见解。 我应该说我正在使用Microsoft Visual Studio 2010,我正在使用MFC和C++。

编辑:

因此,我已经使用了MDI,并且将有一个文档来处理要显示的所有数据。 我现在坚持的是如何创建我想要的多个窗口。 我将 CFormView 替换为文档的图形视图,并且当我单击菜单按钮时,我正在尝试创建该窗口。 我能够使用模式对话框来做到这一点,如下所示:

void CDAQUniversalApp::OnScopebtn()
{
    // TODO: Add your command handler code here
    CScopeDlg dlg = new CScopeDlg(); //CScopeDlg is Subclass of CDialog
    dlg.DoModal();
}

这有效,但不是我想要的,所以我尝试了这个,但它根本没有用:

    m_pScopeTemplate = new CMultiDocTemplate(
        IDD_SCOPEFORMVIEW,
        RUNTIME_CLASS(CDAQUniversalDoc),
        RUNTIME_CLASS(CMDIChildWnd),
        RUNTIME_CLASS(CScopeFormView)); //Subclass of CFormView
    if (!m_pScopeTemplate)
        return FALSE;
void CDAQUniversalApp::OnScopebtn()
{
    // TODO: Add your command handler code here
    CMDIChildWnd* pFrame = NULL;
    pFrame = DYNAMIC_DOWNCAST(CMDIChildWnd, CWnd::GetActiveWindow());
    CMDIChildWnd *pScopeFrame = (CMDIChildWnd*)m_pScopeTemplate->CreateNewFrame(pFrame->GetActiveDocument(), NULL);
    if (pScopeFrame == NULL)
        return;
    m_pScopeTemplate->InitialUpdateFrame(pScopeFrame, pFrame->GetActiveDocument(), TRUE);
}

这只会导致未经处理的异常。 我真的只是蛮力地找到了文档代码中各种基本上无用的部分,并将其修改为我认为我需要的内容。

您的不同窗口(用于视频显示、数据显示和配置)实际上是单个文档的所有视图(不同的视图类),用于管理数据(假设DAQ处理视频数据?

我建议您将应用程序打包到 MDI 应用程序中,从而拥有一个主窗口,所有这些不同的视图作为子窗口。因此,单个文档(甚至是 MDI 中的多个文档)有多个视图。

如果您的应用程序不适合经典的文档/视图体系结构(例如 Word),MFC 可能会很痛苦,但我认为这将是将您的应用程序融入此框架的最佳方式。

相关内容

  • 没有找到相关文章

最新更新