Compartir a través de


Ejemplo MODELESS: utiliza un objeto CDialog como cuadro de diálogo no modal

Actualización: noviembre 2007

El ejemplo MODELESS ilustra el uso de un objeto CDialog de MFC como un cuadro de diálogo no modal. MODELESS es una aplicación sencilla basada en un cuadro de diálogo que administra un cuadro de lista en su cuadro de diálogo principal a la vez que proporciona un cuadro de diálogo no modal que permite agregar cadenas al cuadro de lista de la ventana principal.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para generar y ejecutar el ejemplo MODELESS

  1. Abra la solución modeless.sln.

  2. En el menú Generar, haga clic en Generar.

  3. En el menú Depurar, haga clic en Iniciar sin depurar.

Cuando se inicia el ejemplo, muestra un cuadro de lista vacío. Puede abrir el cuadro de diálogo no modal haciendo clic en Add. Mientras el cuadro de diálogo Modeless Adder está abierto, es posible volver a desplazar la atención al cuadro de diálogo principal. El botón Add del cuadro de diálogo principal no está disponible cuando el cuadro de diálogo no modal está abierto, de forma que el usuario no puede crear más de una instancia del cuadro no modal.

La clase CMainDlg del cuadro de diálogo principal administra un puntero al cuadro de diálogo no modal. Lo hace por comodidad; una vez creado, el cuadro de diálogo no modal no requiere más administración. En la aplicación, podría elegir la información del cuadro de diálogo no modal; ese puntero proporcionaría acceso al objeto C++ que administra el cuadro de diálogo y, por tanto, sería un buen punto de partida.

El código del botón Add del cuadro de diálogo principal crea el cuadro de diálogo no modal mediante la función Create, en lugar de llamar a DoModal. Esto es lo que hace que el cuadro de diálogo sea no modal; Windows trata los mensajes para el cuadro de forma distinta. Cuando se destruye el cuadro, no se utiliza EndDialog; en su lugar, se llama a DestroyWindow. Como las funciones miembro OnOk y OnCancel estándar de un objeto CDialog llamarían a EndDialog, asegúrese de que el cuadro de diálogo no modal no llama a estas funciones, sino que las omite para llamar a DestroyWindow.

Normalmente, al crear un cuadro de diálogo modal, debe destruirlo manualmente cuando se devuelva DoModal. Como no puede esperar a que Create devuelva el control mientras muestra el cuadro de diálogo no modal, debe tener otro mecanismo para destruir el objeto C++ asociado a la ventana. Este ejemplo utiliza un mecanismo muy sencillo: realiza delete this en PostNcDestroy (una función a la que se llama una vez destruida el área no cliente del cuadro).

Tenga en cuenta que el cuadro de diálogo no modal se comunica con su cuadro de diálogo principal de dos maneras diferentes. En primer lugar, cuando el usuario presione OK, se agrega la cadena del control de edición del cuadro de diálogo no modal al contenido del cuadro de lista del cuadro de diálogo modal. En segundo lugar, cuando el usuario destruye la ventana por algún medio, el cuadro de diálogo no modal llama a la función BoxDone en la ventana modal. Esta función simplemente reinicia el puntero al cuadro de diálogo modal y vuelve a habilitar el botón Agregar.

Palabras clave

En este ejemplo, se muestra el uso de las siguientes palabras clave:

AfxGetApp; CDC::DrawIcon; CDC::GetSafeHdc; CDialog::Create; CDialog::DoModal; CDialog::OnCancel; CDialog::OnOK; CListBox::AddString; CMenu::AppendMenu; CMenu::ModifyMenu; CRect::Height; CRect::Width; CString::IsEmpty; CString::LoadString; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWnd::DestroyWindow; CWnd::DoDataExchange; CWnd::EnableWindow; CWnd::GetClientRect; CWnd::GetDlgItem; CWnd::GetWindowText; CWnd::IsIconic; CWnd::OnPaint; CWnd::OnQueryDragIcon; CWnd::OnSysCommand; CWnd::PostNcDestroy; CWnd::SendMessage; CWnd::SetActiveWindow; GetSystemMenu; GetSystemMetrics; LoadIcon

Nota:

Algunos ejemplos, como éste, no se han modificado para reflejar los cambios en los asistentes, las bibliotecas y el compilador de Visual C++, pero, aun así, muestran cómo realizar la tarea deseada.

Vea también

Otros recursos

Ejemplos de MFC