Несколько представлений для документа в приложении MFC MDI

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

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

person Tae-Sung Shin    schedule 15.12.2011    source источник
comment
Переопределение OnFileNew - правильный подход в вашем случае.   -  person zar    schedule 15.12.2011


Ответы (1)


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

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

РЕДАКТИРОВАТЬ: Одна из возможностей - изменить шаблон документа перед открытием дочернего фрейма, который должен иметь альтернативный вид.

m_pMainTemplate->m_m_pNewViewClass = RUNTIME_CLASS(CHistogramView);

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

person Serge Wautier    schedule 15.12.2011
comment
Если вы внимательно прочитаете статью, то заметите, что она предназначена для SDI. Мой для MDI. - person Tae-Sung Shin; 15.12.2011
comment
Методы могут быть адаптированы к MDI: просто позвольте пользователю открыть новый дочерний фрейм и заменить вид при создании фрейма. - person Serge Wautier; 15.12.2011
comment
Я тоже так думал, но в MDI зачем переключать виды? Фактическим требованием является отображение обоих представлений. К вашему сведению: я уже пробовал, но это не работает для MDI. - person Tae-Sung Shin; 15.12.2011
comment
Вы хотите показать 1 представление для каждого дочернего кадра, верно? Таким образом, вы переключаете виды в кадре, который должен привести к альтернативному виду. - person Serge Wautier; 15.12.2011
comment
Я только что решил свою проблему с простым изменением. Я обновил свой ответ. Спасибо за ваши усилия в любом случае. - person Tae-Sung Shin; 15.12.2011