Compartir a través de


Crear una hoja de propiedades no modal

Normalmente, las hojas de propiedades que cree serán 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 modeless 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 modeless en lugar de como un cuadro de diálogo modal, llame a CPropertySheet::Create en lugar de 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 modeless 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 deriva una clase de CPropertySheet para la hoja de propiedades modeless. En este artículo se supone que lo ha hecho.

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

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

Hay muchas alternativas de interfaz de usuario para determinar cuándo se debe aplicar la configuración de la hoja de propiedades modeless a un objeto externo. Una alternativa es aplicar la configuración de la página de propiedades actual siempre que el usuario cambie cualquier valor. Otra alternativa es proporcionar un botón Aplicar, que permite al usuario acumular cambios en las páginas de propiedades antes de confirmarlos en el objeto externo. Para obtener información sobre las formas de controlar el botón Aplicar, consulte el artículo Control del botón Aplicar.

Consulte también

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