Я все еще работаю над программой сбора данных в MFC и зацикливаюсь на работе с архитектурой Document / View. По сути, я хочу, чтобы у моего приложения было несколько окон. Один используется для показа видео, записанного с высокоскоростной камеры, другой имеет график, отображающий данные из системы DAQ, и, возможно, другой имеет элементы управления для настройки камеры и DAQ и т. Д.
Итак, на самом деле у меня много немодальных окон, каждое из которых отображает часть данных, обычно из другого источника. Теперь, работая с мастером приложений, я путаюсь с документами Doc / View, и хотя я могу его отключить, он технически не отключен. Теперь, кроме этого, я попытался открыть немодальные диалоги и FormViews безуспешно. В основном я просто не могу понять, как открыть новый вид, документация не очень полезна. Мне удалось открыть диалоговое окно «Модальное построение» из команды «Кнопка ленты», и я отмечаю это как успех, но не совсем то, что мне нужно.
Итак, кто-нибудь может подсказать, как адаптировать мое приложение к архитектуре Doc / View или открыть немодальное диалоговое окно или FormView из другого приложения. Я должен сказать, что я использую Microsoft Visual Studio 2010, и я использую MFC и C ++.
EDIT:
Итак, я пошел с 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);
}
Это просто вызывает необработанное исключение. На самом деле я просто перебрал свой путь к этой точке, находя различные по большей части бесполезные разделы кода документации и модифицируя его так, как мне кажется.