我仍在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 可能会很痛苦,但我认为这将是将您的应用程序融入此框架的最佳方式。