Compartir a través de


Crear una hoja de propiedades no modal

Normalmente, las hojas de propiedades que crea son modales. Cuando se usa una hoja de propiedades modal, el usuario debe cerrar la hoja de propiedades antes de usar cualquier otra parte de la aplicación. En este artículo se describen los métodos que puede usar para crear una hoja de propiedades no modal que permita al usuario mantener abierta la hoja de propiedades mientras usa otras partes de la aplicación.

Para mostrar una hoja de propiedades como un cuadro de diálogo no modal en lugar de como uno modal, llame a CPropertySheet::Create en lugar de a DoModal. También debe implementar algunas tareas adicionales para admitir una hoja de propiedades no modal.

Una de las tareas adicionales consiste en intercambiar datos entre la hoja de propiedades y el objeto externo que está modificando cuando la hoja de propiedades está abierta. Por lo general, esta es la misma tarea que para los cuadros de diálogo no modales estándar. Parte de esta tarea implementa un canal de comunicación entre la hoja de propiedades no modal y el objeto externo al que se aplica la configuración de la propiedad. Esta implementación es mucho más fácil si se deriva una clase de CPropertySheet para la hoja de propiedades no modal. En este artículo se supone que eso ya lo ha hecho.

Un método para comunicarse entre la hoja de propiedades no modal y el objeto externo (la selección actual en una vista, por ejemplo) consiste en definir un puntero de la hoja de propiedades al objeto externo. Defina una función (denominada SetMyExternalObject o algo similar) en la clase derivada de CPropertySheet para cambiar el puntero cada vez que el foco cambie de un objeto externo a otro. La función SetMyExternalObject debe restablecer la configuración de cada página de propiedades para reflejar el objeto externo recién seleccionado. Para ello, la función SetMyExternalObject debe poder acceder a los objetos CPropertyPage que pertenecen a la clase CPropertySheet.

La manera más cómoda de proporcionar acceso a las páginas de propiedades dentro de una hoja de propiedades es insertar los objetos CPropertyPage en el objeto derivado de CPropertySheet. La inserción de objetos CPropertyPage en el objeto derivado de CPropertySheet difiere del diseño típico de los cuadros de diálogo modales, donde el propietario de la hoja de propiedades crea los objetos CPropertyPage y los pasa a la hoja de propiedades mediante CPropertySheet::AddPage.

Hay muchas alternativas de interfaz de usuario para determinar cuándo se debe aplicar la configuración de la hoja de propiedades no modal a un objeto externo. Una alternativa consiste en aplicar la configuración de la página de propiedades actual cada vez que el usuario cambia cualquier valor. Otra alternativa es proporcionar un botón Aplicar que permita al usuario acumular cambios en las páginas de propiedades antes de confirmarlos en el objeto externo. Para más información sobre las formas de controlar el botón Aplicar, consulte el artículo Controlar el botón Aplicar.

Consulte también

Hojas de propiedades
Intercambio de datos
Trabajar con cuadros de diálogo en MFC