Cómo cambiar un diálogo no modal MFC ser el hijo de un CView en una aplicación MDI?

StackOverflow https://stackoverflow.com/questions/2545517

  •  23-09-2019
  •  | 
  •  

Pregunta

Tengo una aplicación MFC que es una implementación Doc / Vista / marco. Uno de diálogo se ejecuta como un diálogo no modal, que aparece en la demanda (de una opción de menú). Busco para añadir el diálogo no modal a una vista secundaria MDI. Básicamente, quiero cargar la plantilla del archivo de recursos, y crearlo como un hijo de la CView en mi nuevo trío (doc / foto / marco) que estoy añadiendo a las listas de plantilla para el MDI.

He intentado algunas cosas en mi clase derivada CMyView:

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

He intentado llamar SetWindowPos, ModifyStyle (WS_CHILD, WS_VISIBLE, DS_CONTROL). He intentado modificar el archivo de recursos para establecer el niño y controlar de forma manual.

Cada vez que llama Crear, m_hWnd del diálogo Lista se deja como 0. Esto me no está consiguiendo creado correctamente dice. Cualquier llamada a SetWindowPos () o ShowWindow () falla porque el m_hWnd es 0 (no aserción de depuración).

¿Qué tengo que hacer para conseguir un cuadro de diálogo modal que se construirá, creado, y aparecen como un niño a CMyView en mi aplicación MDI?

¿Fue útil?

Solución

No sé. Pero ...
Tiene varias opciones alternativas que podrían ser adecuados en función de cómo la aplicación debe miradas.

1 / usando CFormView. Si su vista está dedicado al diálogo a continuación, se puede derivar una vista desde el CFormView clase MFC. El propósito de este punto de vista es para mostrar un diálogo.

Juste crear una nueva aplicación mediante el asistente y yo creo que debería ser capaz de elegir la clase de CFormView como la clase de vista, a continuación, copiar el archivo generado en su aplicación existaing.

2 / El uso de un CSplitterWnd. Un punto de vista de ser un CFormView y el otro a su CView actual.

3 / usando CDialogBar Si su vista ya muestra algo, puede agregar su diálogo como una barra de herramientas utilizando el CDialogBar clase.

Otros consejos

esto está funcionando en mi aplicación 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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top