Compartir a través de


Controles ActiveX MFC: Implementación de propiedades avanzada

En este artículo se describen temas relacionados con la implementación de propiedades avanzadas en un control ActiveX.

Importante

ActiveX es una tecnología heredada que no se debe usar para el nuevo desarrollo. Para más información sobre las tecnologías modernas que reemplazan a ActiveX, vea Controles ActiveX.

Propiedades de solo lectura y de solo escritura

El Asistente para agregar propiedades proporciona un método rápido y sencillo para implementar propiedades de solo lectura o de solo escritura para el control.

Para implementar una propiedad de solo lectura o de solo escritura

  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 el nombre de la propiedad.

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

  7. En el cuadro Tipo de propiedad, seleccione el tipo adecuado para la propiedad.

  8. Si quiere una propiedad de solo lectura, desactive el nombre de la función Set. Si quiere una propiedad de solo escritura, desactive el nombre de la función Get.

  9. Haga clic en Finalizar

Al hacerlo, el Asistente para agregar propiedades inserta la función SetNotSupported o GetNotSupported en la entrada de la asignación de distribución, en lugar de una función Set u Get normal.

Si quiere cambiar una propiedad existente para que sea de solo lectura o de solo escritura, puede editar la asignación de distribución manualmente y quitar la función Set u Get innecesaria de la clase de control.

Si quiere que una propiedad sea condicionalmente de solo lectura o de solo escritura (por ejemplo, solo cuando el control funciona en un modo determinado), puede proporcionar la función Set u Get del modo habitual y llamar a la función SetNotSupported o GetNotSupported cuando corresponda. Por ejemplo:

void CMyAxUICtrl::SetMyProperty(SHORT newVal)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   if (m_bReadOnlyMode)   //  some control-specific state
   {
      SetNotSupported();
   }
   else
   {
      m_iPropVal = newVal;   //  set property as normal
      SetModifiedFlag();
   }
}

Este ejemplo de código llama a SetNotSupported si el miembro de datos m_bReadOnlyMode es TRUE. Si es FALSE, la propiedad se establece en el nuevo valor.

Devolución de códigos de error desde una propiedad

Para indicar que se ha producido un error al intentar obtener o establecer una propiedad, use la función COleControl::ThrowError, que toma un valor SCODE (código de estado) como parámetro. Puede usar un SCODE predefinido o definir uno propio. Para obtener una lista de los valores SCODE predefinidos e instrucciones sobre cómo definir valores SCODE personalizados, consulte Control de errores en el control ActiveX en el artículo Controles ActiveX: temas avanzados.

Existen funciones del asistente para los valores SCODE predefinidos más comunes, como COleControl::SetNotSupported, COleControl::GetNotSupported y COleControl::SetNotPermitted.

Nota:

ThrowError está diseñado para usarse solo como medio de devolver un error desde la función Get o Set de una propiedad o un método de automatización. Estas son las únicas veces que el controlador de excepciones adecuado estará presente en la pila.

Para obtener más información sobre cómo notificar excepciones en otras áreas del código, vea COleControl::FireError y la sección Control de errores en el control ActiveX en el artículo Controles ActiveX: temas avanzados.

Consulte también

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