2011-12-15 2 views
0

Я хотел бы иметь несколько представлений для документа в приложении MDI MFC. Для того, чтобы сделать это, InitInstance моего класса App имеет следующий кодMutiple Views для Doc в приложении MFC MDI

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); 

Но когда я запустить приложение, оно продолжает спрашивать, какой документ из двух документов, пользователь хочет выбрать. Конечно, эти документы одинаковы. Любая идея или намек на решение этой проблемы?

UPDATE: Я решил эту проблему, имея отдельное меню для второй точки зрения и переопределение OnFileNew как этот

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

Переопределение OnFileNew - правильный подход в вашем случае. – zar

ответ

1

Не добавляйте второй шаблон.

Этот Microsoft KB article показывает, как создать несколько представлений для одного документа.

EDIT: возможно изменение шаблона документа перед тем, как открыть дочерний кадр, который должен иметь альтернативный вид.

m_pMainTemplate->m_m_pNewViewClass = RUNTIME_CLASS(CHistogramView); 

Затем вы должны, вероятно, установить вид в шаблоне перед открытием любого вида дочернего фрейма для того, чтобы убедиться, что шаблон находится в ожидаемом состоянии для каждого открытия дочернего фрейма.

+0

Если вы прочитаете статью с некоторой осторожностью, вы заметите, что это для SDI. Шахта предназначена для MDI. –

+0

Методы могут быть адаптированы к MDI: просто дайте пользователю открыть новый дочерний фрейм и замените представление на создание фрейма. –

+0

Я тоже так думал, но в MDI, почему вы переключаете представления? Фактическое требование - показать оба представления. FYI: Я уже пробовал, но это не работает для MDI. –