Compartir por


Controles ActiveX MFC: Agregar propiedades personalizadas

Las propiedades personalizadas difieren de las propiedades de stock en que las propiedades personalizadas aún no están implementadas por la clase COleControl. Una propiedad personalizada se usa para exponer un determinado estado o apariencia de un control ActiveX a un programador mediante el control.

En este artículo se describe cómo agregar una propiedad personalizada a un control ActiveX mediante el Asistente para agregar propiedades y se explican las modificaciones de código resultantes. Contenido de los temas:

Las propiedades personalizadas vienen en cuatro variedades de implementación: Variable miembro, Variable miembro con notification, Get/Set Methods y Parameterized.

  • Implementación de variables miembro

    Esta implementación representa el estado de la propiedad como una variable miembro en la clase de control. Use la implementación de variable miembro cuando no sea importante saber cuándo cambia el valor de la propiedad. De los tres tipos, esta implementación crea la menor cantidad de código de compatibilidad para la propiedad. La macro de entrada de mapa de distribución para la implementación de variables miembro es DISP_PROPERTY.

  • Variable miembro con implementación de notificación

    Esta implementación consta de una variable miembro y una función de notificación creada por el Asistente para agregar propiedades. El marco llama automáticamente a la función de notificación después de que cambie el valor de la propiedad. Use la variable miembro con la implementación de notificación cuando necesite recibir una notificación después de que haya cambiado un valor de propiedad. Esta implementación requiere más tiempo porque requiere una llamada de función. La macro de entrada de mapa de distribución para la implementación es DISP_PROPERTY_NOTIFY.

  • Implementación de métodos Get/Set

    Esta implementación consta de un par de funciones miembro en la clase de control. La implementación get/set methods llama automáticamente a la función miembro Get cuando el usuario del control solicita el valor actual de la propiedad y la función miembro Set cuando el usuario del control solicita que se cambie la propiedad. Use esta implementación cuando necesite calcular el valor de una propiedad durante el tiempo de ejecución, valide un valor pasado por el usuario del control antes de cambiar la propiedad real o implemente un tipo de propiedad de solo lectura o escritura. La macro de entrada de mapa de distribución para la implementación es DISP_PROPERTY_EX. En la sección siguiente, Usar el Asistente para agregar propiedades para agregar una propiedad personalizada, usa la propiedad personalizada CircleOffset para demostrar esta implementación.

  • Implementación con parámetros

    La implementación con parámetros es compatible con el Asistente para agregar propiedades. Una propiedad parametrizada (a veces denominada matriz de propiedades) se puede usar para tener acceso a un conjunto de valores a través de una sola propiedad del control. La macro de entrada de mapa de distribución para la implementación es DISP_PROPERTY_PARAM. Para obtener más información sobre cómo implementar este tipo, vea Implementación de una propiedad parametrizada en el artículo Controles ActiveX: Temas avanzados.

Uso del Asistente para agregar propiedades para agregar una propiedad personalizada

En el procedimiento siguiente se muestra cómo agregar una propiedad personalizada, CircleOffset, que usa la implementación de Get/Set Methods. La propiedad personalizada CircleOffset permite al usuario del control desplazar el círculo desde el centro del rectángulo delimitador del control. El procedimiento para agregar propiedades personalizadas con una implementación distinta de Get/Set Methods es muy similar.

Este mismo procedimiento también se puede usar para agregar otras propiedades personalizadas que desee. Sustituya el nombre de la propiedad personalizada por el nombre y los parámetros de la propiedad CircleOffset.

Para agregar la propiedad Font personalizada mediante el asistente para agregar propiedades

  1. Cargue el proyecto del control.

  2. En la vista de clases, expanda el nodo de biblioteca del control.

  3. Haga clic con el botón derecho en el nodo de interfaz del control (el segundo nodo del nodo de biblioteca) para abrir el menú contextual.

  4. En el menú contextual, haga clic en Agregar y después en Agregar propiedad.

    Se abrirá el Asistente para agregar propiedades.

  5. En el cuadro Nombre de propiedad, escriba CircleOffset.

  6. En Tipo de implementación, haga clic en Métodos Get/Set.

  7. En el cuadro Tipo de propiedad, seleccione short.

  8. Escriba nombres únicos para las funciones Get y Set o acepte los nombres predeterminados.

  9. Haga clic en Finalizar

Cambios del Asistente para agregar propiedades para las propiedades personalizadas

Al agregar la propiedad personalizada CircleOffset, el Asistente para agregar propiedades realiza cambios en el encabezado (. H) y los archivos (.CPP) de implementación de la clase de control.

Las líneas siguientes se agregan a . Archivo H para declarar dos funciones denominadas GetCircleOffset y SetCircleOffset:

SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);

La siguiente línea se agrega al archivo .IDL del control:

[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;

Esta línea asigna a la propiedad CircleOffset un número de identificador específico, tomado de la posición del método en la lista de métodos y propiedades del Asistente para agregar propiedades.

Además, se agrega la línea siguiente al mapa de distribución (en . Archivo CPP de la clase de control) para asignar la propiedad CircleOffset a las dos funciones de controlador del control:

DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)

Por último, las implementaciones de las funciones GetCircleOffset y SetCircleOffset se agregan al final del archivo .CPP. En la mayoría de los casos, modificará la función Get para devolver el valor de la propiedad. La función Set normalmente contendrá código que se debe ejecutar, ya sea antes o después de que la propiedad cambie.

void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

Tenga en cuenta que el Asistente para agregar propiedades agrega automáticamente una llamada a SetModifiedFlag al cuerpo de la función Set. Al llamar a esta función, se marca el control como modificado. Si se ha modificado un control, se guardará su nuevo estado cuando se guarde el contenedor. Se debe llamar a esta función cada vez que una propiedad, guardada como parte del estado persistente del control, cambia el valor.

Consulte también

Controles ActiveX de MFC
Controles ActiveX MFC: Propiedades
Controles ActiveX MFC: Métodos
COleControl (clase)