Share via


Controles ActiveX de MFC: Mediante las imágenes en un control ActiveX

En este artículo se describe el tipo de imagen común y cómo implementarlo en el control ActiveX.Entre los temas se incluyen los siguientes:

  • Información general de las propiedades de imágenes personalizadas

  • Implementar una propiedad de imagen personalizada en el control ActiveX de IU

  • Adiciones al proyecto de control de IU

Información general de las propiedades de imágenes personalizadas

Un tipo de imagen pertenecen a un grupo de tipos comunes a algunos controles ActiveX.El tipo de imagen controla metarchivos, mapas de bits, o iconos y permite al usuario especificar una imagen que se va a mostrar en un control ActiveX.Las propiedades de imágenes personalizadas se implementan utilizando un objeto de imagen y obtienen y establecen las funciones que permiten el acceso de usuario a la propiedad de imagen.Los usuarios del Control tienen acceso a la propiedad de imagen personalizada mediante la página de propiedad de imagen común.

Además del tipo de la imagen estándar, los tipos de fuente y de Color también están disponibles.Para obtener más información sobre la utilización de fuentes estándar escribir en el control ActiveX, vea el artículo Controles ActiveX de MFC: Utilizar las fuentes.

Las clases de control ActiveX proporcionan varios componentes que puede utilizar para implementar la propiedad de imagen dentro del control.Esta son los componentes:

  • La clase de CPictureHolder .

    Esta clase proporciona acceso fácil al objeto y funcionalidad de la imagen para el elemento mostrado por la propiedad de imagen personalizada.

  • Compatibilidad con las propiedades de LPPICTUREDISPescrito, implementadas con get/set funciones.

    Mediante la vista de clases puede agregar rápidamente una propiedad personalizada, o propiedades, que admite el tipo de imagen.Para obtener más información sobre las propiedades del control ActiveX de suma con la vista de clases, vea el artículo Controles ActiveX de MFC: Propiedades.

  • Una página de propiedades que manipula la propiedad de imagen o las propiedades de un control.

    Esta página de propiedades es parte de un grupo de páginas de propiedades comunes disponibles para los controles ActiveX.Para obtener más información sobre las páginas de propiedades de controles ActiveX, vea el artículo Controles ActiveX de MFC: Utilizando las páginas de propiedades comunes

Implementar una propiedad de imagen personalizada en el control ActiveX de IU

Cuando haya completado los pasos descritos en esta sección, el control puede mostrar imágenes elegidas por el usuario.El usuario puede cambiar la imagen mostrada mediante una página de propiedades que muestre la imagen actual y tiene un botón Examinar que permite al usuario a las imágenes diferentes seleccionar.

Una propiedad de imagen personalizada se implementa mediante un proceso similar al utilizado para implementar otras propiedades, la diferencia principal es que la propiedad personalizada debe admitir un tipo de imagen.Dado que el elemento de imagen se debe dibujar el control ActiveX, varias adiciones y modificaciones se deben crear a la propiedad antes de poder implementada totalmente.

Para implementar una propiedad de imagen personalizada, debe hacer lo siguiente:

  • Agregue código al proyecto de control.

    Un identificador de la página de propiedades de la imagen estándar, un miembro de datos de CPictureHoldercon tipo, y una propiedad personalizada de LPPICTUREDISP escrito con una implementación get/set deben agregarse.

  • Modifique varias funciones de su clase de control.

    Estas modificaciones se crearán a varias funciones que se encargan de dibujo del control ActiveX.

Adiciones al proyecto de control de IU

Para agregar el identificador de la página de propiedades de la página de propiedades de la imagen estándar, inserte la línea siguiente después de la macro de BEGIN_PROPPAGEIDS en el archivo de implementación del control (.CPP):

PROPPAGEID(CLSID_CPicturePropPage)

Se debe aumentar el parámetro count de la macro de BEGIN_PROPPAGEIDS por una.La siguiente línea muestra esto:

BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)

Para agregar el miembro de datos de CPictureHolder a la clase de control, inserte la línea siguiente en la sección protected de la declaración de clase de control en el archivo de encabezado del control (. h):

CPictureHolder    m_pic;

No es necesario llamar al miembro de datos m_pic; cualquier nombre será suficiente.

A continuación, agrega una propiedad personalizada que admita un tipo de imagen:

Para agregar una propiedad de imagen personalizada 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, elija agregar y después Agregar propiedad.

  5. En el cuadro de Property Name , escriba el nombre de propiedad.Por ejemplo fines, ControlPicture se utilizan en este procedimiento.

  6. En el cuadro de Property Type , seleccione IPictureDisp* para el tipo de propiedad.

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

  8. Los nombres únicos de tipo para su obtienen y establecen funciones o aceptan los nombres predeterminados.(En este ejemplo, los nombres predeterminados se utiliza GetControlPicture y SetControlPicture .)

  9. Haga clic en Finalizar.

El asistente para agregar agregue el código siguiente entre los comentarios del mapa de distribución en el encabezado del control (. h) archivo:

IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);

Además, el código siguiente se incrustará en el mapa de envío del archivo de implementación del control (.CPP):

DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture, 
   GetControlPicture, SetControlPicture, VT_PICTURE)

El asistente para agregar también agrega las dos funciones siguientes del código auxiliar del archivo de implementación del control:

IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your dispatch handler code here

   return NULL;
}

void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

[!NOTA]

Los nombres de clase de control y de función podrían diferir del ejemplo anterior.

1exs6wht.collapse_all(es-es,VS.110).gifModificaciones al proyecto de control de IU

Después de haber creado las adiciones necesarias al proyecto de control, necesita modificar varias funciones que afectan a la representación del control ActiveX.Estas funciones, OnResetState, OnDraw, y las funciones get/set de una propiedad de imagen personalizada, se encuentran en el archivo de implementación del control.(Observe que en este ejemplo la clase control se denomina CSampleCtrl, el miembro de datos de CPictureHolder se denomina m_pic, y el nombre de propiedad de imagen personalizado es ControlPicture.)

En función de OnResetState el control, agregue la línea opcional siguiente después de la llamada a COleControl::OnResetState:

m_pic.CreateEmpty();

Esto establece el control a una imagen en blanco.

Para dibujar la imagen correctamente, realice una llamada a CPictureHolder::Render en función de OnDraw del control.Modifique la función para ser similar al ejemplo siguiente:

void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
    if (!pdc)
        return;

   m_pic.Render(pdc, rcBounds, rcBounds);
}

En la función get de la propiedad de imagen personalizada del control, agregue la línea siguiente:

return m_pic.GetPictureDispatch();

En la función determinada de la propiedad de imagen personalizada del control, agregue las líneas siguientes:

m_pic.SetPictureDispatch(pVal);
InvalidateControl();

La propiedad de imagen debe crear persistente de modo que la información agregada en tiempo de diseño aparece en tiempo de ejecución.Agregue la línea siguiente a COleControl(función de DoPropExchange de clase derivada:

PX_Picture(pPX, _T("ControlPicture"), m_pic);

[!NOTA]

Los nombres de clase y de función podrían diferir del ejemplo anterior.

Después de completar las modificaciones, recompile el proyecto de escribir la nueva funcionalidad de contenedor personalizado de prueba de la propiedad de imagen y de uso para probar la nueva propiedad.Vea Probar propiedades y eventos con Test Container para obtener información sobre cómo tener acceso a Test Container.

Vea también

Conceptos

Controles ActiveX de MFC

Controles ActiveX de MFC: Utilizar las fuentes

Controles ActiveX de MFC: Páginas de propiedades