Pregunta

Tengo un diálogo (clase derivada de CDialog) que se puede usar de dos maneras diferentes (modo de edición y modo de programación).

Cuando el cuadro de diálogo está abierto para usarse en modo de programación, es un cuadro de diálogo sin modo que se usa para modificar la vista principal (una especie de barra de herramientas). Cuando está abierto en modo edición, el usuario puede cambiar la configuración del cuadro de diálogo y, en este caso, es un cuadro de diálogo modal.

En este momento son dos diálogos diferentes con pocas diferencias y me gustaría tener solo un diálogo y permitir que el usuario cambie entre el modo de programación y el modo de edición simplemente presionando un botón en el diálogo.

Entonces necesito convertir el diálogo sin modo en un diálogo modal y viceversa en tiempo de ejecución. ¿Hay alguna manera de lograr eso?

Gracias.

¿Fue útil?

Solución

Como tal vez alguien podría estar interesado en hacer algo similar en el futuro, esta es la forma en que finalmente lo hice:

Utilizo estas dos funciones del marco principal: CMainFrame :: BeginModalState () y CMainFrame :: EndModalState () .

El problema con estas funciones es el mismo que al deshabilitar la ventana principal. La ventana que desea hacer modal también se deshabilita. Pero la solución es fácil, solo vuelva a habilitar la ventana después de llamar a BeginModalState .

void CMyDialog::MakeModal()
{
   //disable all main window descendants
   AfxGetMainWnd()->BeginModalState();

   //re-enable this window
   EnableWindow(TRUE);
}

void CMyDialog::MakeModeless()
{
   //enable all main window descendants
   AfxGetMainWnd()->EndModalState();
}

Gracias por su ayuda.

Otros consejos

Eso no se puede hacer fácilmente sin cerrar y volver a abrir el cuadro de diálogo. Luego puede llamar a ShowWindow o DoModal según corresponda.

Eso no es correcto. Esto se puede hacer, si observa la fuente de MFC se dará cuenta de que sus diálogos modales no son técnicamente incluso modales. Tendrá que hacer mucho trabajo para que esto funcione correctamente, pero básicamente solo tiene que deshabilitar el elemento primario de la ventana 'modal' y volver a habilitarlo cuando se cierre la ventana 'modal'.

He hecho esto personalmente, así que esto puede funcionar para usted, aunque no estoy exactamente seguro de lo que está tratando de hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top