Share via


Controles ActiveX de MFC: Agregar propiedades personalizadas

Las propiedades personalizadas difieren de las propiedades comunes en ese propiedades personalizadas no se implementan ya por la clase de COleControl .Una propiedad personalizada se utiliza para exponer algún 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 al control ActiveX mediante el asistente para agregar propiedades y explica las modificaciones resultantes de código.Entre los temas se incluyen los siguientes:

  • Mediante el asistente para agregar propiedades para agregar una propiedad personalizada

  • Agregue los cambios del asistente de las propiedades personalizadas

Las propiedades personalizadas proceden de cuatro variedades de implementación: La variable miembro, variable miembro con la notificación, get/set, y Parametrizada.

  • Implementación de variable miembro

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

  • Variable miembro con la aplicación de notificación

    Esta implementación se compone de una variable miembro y una función de notificación creada por el asistente para agregar propiedades.La función de notificación automáticamente a los que llama el marco después de que el valor de propiedad.Utilice la variable miembro con la aplicación de notificación cuando necesita recibir una notificación cuando un valor de propiedad ha cambiado.Esta implementación requiere más tiempo porque requiere una llamada de función.La macro de entrada de asignación de envío para esta implementación es DISP_PROPERTY_NOTIFY.

  • Get/set la implementación de los métodos

    Esta implementación se compone de un par de funciones miembro de la clase de control.La implementación de los métodos get/set llama automáticamente a la función miembro get cuando funcionan las solicitudes de usuario del control el valor actual de la propiedad y el miembro determinado cuando las solicitudes de usuario del control que la propiedad se cambie.Utilice esta implementación cuando necesite calcular el valor de una propiedad en tiempo de ejecución, validar un valor pasado por el usuario del control antes de cambiar la propiedad real, o implementar un tipo de propiedad leída o de sólo escritura.La macro de entrada de asignación de envío para esta implementación es DISP_PROPERTY_EX.La sección siguiente, Mediante el asistente para agregar propiedades para agregar una propiedad personalizada, utiliza la propiedad personalizada de CircleOffset para mostrar esta implementación.

  • Implementación con parámetros

    La implementación con parámetros admitida por el asistente para agregar propiedades.Una propiedad con parámetros (denominada en ocasiones una matriz de propiedades) se puede utilizar para tener acceso a un conjunto de valores a través de una propiedad del control.La macro de entrada de asignación de envío para esta implementación es DISP_PROPERTY_PARAM.Para obtener más información sobre la implementación de este tipo, vea Implementar una propiedad de Parametrizada en Controles ActiveX de caso: Temas avanzados.

Mediante el asistente para agregar propiedades para agregar una propiedad personalizada

El procedimiento siguiente muestra cómo agregar una propiedad personalizada, CircleOffset, que utiliza la implementación de los métodos get/set.La propiedad personalizada de CircleOffset permite al usuario del control del círculo del centro del rectángulo delimitador del control.El procedimiento para agregar propiedades personalizadas con una implementación distinta de get/set es muy similar.

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

Para agregar la propiedad personalizada de CircleOffset mediante el asistente para agregar propiedades

  1. Cargue el proyecto de control.

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

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

  4. En el menú contextual, haga clic agregar y haga clic en Agregar propiedad.

    Esto abre Asistente para agregar propiedades.

  5. En el cuadro de Property Name , CircleOffsetescrito.

  6. Para Implementation Type, haga clic en Get/Set Methods.

  7. En el cuadro de Property Type , seleccione short.

  8. Los nombres únicos de tipo para su obtienen y establecen funciones, o aceptan los nombres predeterminados.

  9. Haga clic en Finalizar.

Agregue los cambios del asistente de las propiedades personalizadas

Cuando se agrega una propiedad personalizada de CircleOffset, el asistente para agregar realiza cambios en el encabezado (. H) y los archivos de implementación (.CPP) de la clase de control.

Las líneas siguientes se agregan a. El archivo de h para declarar dos funciones denominado GetCircleOffset y SetCircleOffset:

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

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

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

Esta línea asigna a propiedad de CircleOffset el número de identificación concreto, tomado de la posición de los métodos y la lista de propiedades del asistente para agregar propiedades.

Además, la siguiente línea se agrega al mapa de envío (en el archivo de .CPP de la clase de control) para asignar la propiedad de CircleOffset a las funciones de controlador de control dos:

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

Finalmente, las implementaciones de GetCircleOffset y las funciones de SetCircleOffset se agregan al final del archivo de .CPP del control.En la mayoría de los casos, modificará la función get para devolver el valor de la propiedad.La función determinada contendrá normalmente el código que debe ejecutarse antes o después de que la propiedad cambia.

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

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

Observe que el asistente para agregar agrega automáticamente una llamada, a SetModifiedFlag, el cuerpo de la función determinada.Llamando a esta función marca el control como modificado.Si se ha modificado un control, guardar el nuevo estado cuando se guarda el contenedor.Esta función debe llamar siempre que una propiedad, guardará como parte del estado persistente de control, cambie valor.

Vea también

Referencia

COleControl (Clase)

Conceptos

Controles ActiveX de MFC

Controles ActiveX de MFC: Propiedades

Controles ActiveX de MFC: métodos