Как изменить MFC Modeless Dialog, чтобы стать дочерним элементом CView в приложении MDI? - PullRequest
1 голос
/ 30 марта 2010

У меня есть приложение MFC, которое является реализацией Doc / View / Frame. Один диалог работает как немодальный диалог, который появляется по требованию (из пункта меню). Я ищу, чтобы добавить немодальное диалоговое окно для дочернего представления MDI. В основном я хочу загрузить шаблон из файла ресурсов и создать его как дочерний элемент CView в моем новом трио (doc / view / frame), которое я добавляю в списки шаблонов для MDI.

Я пробовал несколько вещей в своем производном классе CMyView:

void CMyView::OnInitialUpdate()
{
  m_ListDialog = new Dialogs::CListDialog( m_config, this );
  m_ListDialog->Create( Dialogs::CListDialog::IDD, this );
  m_ListDialog->ShowWindow( SW_SHOW );
}

Я пытался вызвать SetWindowPos, ModifyStyle (WS_CHILD, WS_VISIBLE, DS_CONTROL). Я попытался изменить файл ресурсов, чтобы установить дочерний элемент и элемент управления вручную.

Каждый раз, когда он вызывает Create, m_hWnd ListDialog остается равным 0. Это говорит мне, что он не создается должным образом. Любой вызов SetWindowPos () или ShowWindow () завершается ошибкой, поскольку m_hWnd равен 0 (сбой отладочного утверждения).

Что мне нужно сделать, чтобы получить немодальное диалоговое окно для создания, создания и отображения в качестве дочернего для CMyView в моем приложении MDI?

Ответы [ 2 ]

1 голос
/ 31 марта 2010

это работает в моем приложении MDI ...

void CGUIView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    p_Dlg = new CTestDlg;   // a CDialog derived class
    p_Dlg->Create(IDD_DIALOG1,this);
    p_Dlg->ShowWindow(SW_SHOW);
}
1 голос
/ 31 марта 2010

Я не знаю. Но ...
У вас есть несколько альтернативных вариантов, которые могут подойти в зависимости от того, как должно выглядеть ваше приложение.

1 / с использованием CFormView. Если ваш вид посвящен диалогу, вы можете получить вид из класса MFC CFormView. Целью этого представления является отображение диалога.

Juste создайте новое приложение с помощью мастера, и я думаю, что вы сможете выбрать класс CFormView в качестве класса представления, а затем скопировать сгенерированный файл в существующее приложение.

2 / Использование CSplitterWnd. Одно представление является CFormView, а другое - текущим CView.

3 / с использованием CDialogBar Если ваш вид уже что-то отображает, вы можете добавить свой диалог в виде панели инструментов, используя класс CDialogBar.

...