Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe el tipo de imagen común y cómo implementarlo en el control ActiveX. Contenido de los temas:
Información general sobre las propiedades de imagen personalizadas
Implementación de una propiedad de imagen personalizada en el control ActiveX
Información general sobre las propiedades de imagen personalizadas
Un tipo de imagen es uno de un grupo de tipos comunes a algunos controles ActiveX. El tipo de imagen controla los 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 imagen personalizada se implementan mediante un objeto de imagen y las funciones Get/Set que permiten al usuario controlar el acceso a la propiedad Picture. Controlar que los usuarios accedan a la propiedad Picture personalizada mediante la página de propiedades Picture de stock.
Además del tipo de imagen estándar, los tipos font y color también están disponibles. Para obtener más información sobre el uso del tipo de fuente estándar en el control ActiveX, consulte el artículo Controles ActiveX de MFC: Uso de fuentes.
Las clases de control ActiveX proporcionan varios componentes que puede usar para implementar la propiedad Picture dentro del control. Estos componentes incluyen:
La clase CPictureHolder .
Esta clase proporciona acceso sencillo al objeto de imagen y a la funcionalidad del elemento mostrado por la propiedad Picture personalizada.
Compatibilidad con propiedades de tipo LPPICTUREDISP, implementadas con funciones Get/Set.
Con la vista de clases, puede agregar rápidamente una propiedad personalizada o propiedades que admita el tipo de imagen. Para obtener más información sobre cómo agregar propiedades de control ActiveX con la vista de clases, consulte el artículo Controles ActiveX de MFC: Propiedades.
Página de propiedades que manipula la propiedad o propiedades picture de un control.
Esta página de propiedades forma parte de un grupo de páginas de propiedades de stock disponibles para los controles ActiveX. Para obtener más información sobre las páginas de propiedades del control ActiveX, consulte el artículo Controles ActiveX de MFC: Uso de páginas de propiedades de stock.
Implementación de una propiedad de imagen personalizada en el control ActiveX
Cuando haya completado los pasos descritos en esta sección, el control puede mostrar imágenes elegidas por su usuario. El usuario puede cambiar la imagen mostrada mediante una página de propiedades que muestre la imagen actual y tenga un botón Examinar que permita al usuario seleccionar imágenes diferentes.
Una propiedad Picture personalizada se implementa mediante un proceso similar al que se usa para implementar otras propiedades, la principal diferencia es que la propiedad personalizada debe admitir un tipo picture. Dado que el elemento de la propiedad Picture debe dibujarse mediante el control ActiveX, se deben realizar varias adiciones y modificaciones en la propiedad para poder implementarse por completo.
Para implementar una propiedad Picture personalizada, debe hacer lo siguiente:
Agregue código al proyecto de control.
Se debe agregar un identificador de página de propiedades Picture estándar, un miembro de datos de tipo
CPictureHolder
y una propiedad personalizada de tipo LPPICTUREDISP con una implementación Get/Set.Modifique varias funciones en la clase de control.
Estas modificaciones se realizarán en varias funciones que son responsables del dibujo del control ActiveX.
Adiciones al proyecto de control
Para agregar el identificador de página de propiedades de la página de propiedades Picture estándar, inserte la siguiente línea después de la macro BEGIN_PROPPAGEIDS en el archivo de implementación de control (. CPP):
PROPPAGEID(CLSID_CPicturePropPage)
También debe incrementar el parámetro count de la macro de BEGIN_PROPPAGEIDS en uno. En la línea siguiente se muestra lo siguiente:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
Para agregar el CPictureHolder
miembro de datos a la clase de control, inserte la siguiente línea en la sección protegida de la declaración de clase de control en el archivo de encabezado de control (. H):
CPictureHolder m_pic;
No es necesario asignar un nombre al miembro de datos m_pic; cualquier nombre bastará.
A continuación, agregue una propiedad personalizada que admita un tipo de imagen:
Para agregar una propiedad de imagen personalizada mediante el Asistente para agregar propiedades
Cargue el proyecto del control.
En la Vista de clases, expanda el nodo biblioteca del control.
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.
En el menú contextual, elija Agregar y, a continuación, Agregar propiedad.
En el cuadro Nombre de propiedad, escriba el nombre de la propiedad. Por ejemplo,
ControlPicture
se usa en este procedimiento.En el cuadro Tipo de propiedad , seleccione IPictureDisp* para el tipo de propiedad.
En Tipo de implementación, haga clic en Obtener o establecer métodos.
Escriba nombres únicos para las funciones Get y Set o acepte los nombres predeterminados. (En este ejemplo, se usan los nombres
GetControlPicture
predeterminados ySetControlPicture
).Haga clic en Finalizar
El Asistente para agregar propiedades agrega el código siguiente entre los comentarios del mapa de distribución en el encabezado de control (. H) archivo:
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
Además, el código siguiente se insertó en el mapa de distribución de la implementación del control (. Archivo CPP):
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
El Asistente para agregar propiedades también agrega las dos funciones de código auxiliar siguientes en el archivo de implementación de 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 función y clase de control pueden diferir del ejemplo anterior.
Modificaciones en el proyecto de control
Después de realizar las adiciones necesarias al proyecto de control, debe modificar varias funciones que afectan a la representación del control ActiveX. Estas funciones, OnResetState
, OnDraw
y las funciones Get/Set de una propiedad Picture personalizada se encuentran en el archivo de implementación de control. (Tenga en cuenta que en este ejemplo, la clase de control se denomina , el CPictureHolder
miembro de datos se denomina CSampleCtrl
m_pic y el nombre de la propiedad de imagen personalizada es ControlPicture
).
En la función de control OnResetState
, agregue la siguiente línea opcional después de la llamada a COleControl::OnResetState
:
m_pic.CreateEmpty();
m_pic.CreateEmpty();
Esto establece la imagen del control en una imagen en blanco.
Para dibujar la imagen correctamente, realice una llamada a CPictureHolder::Render en la función de control OnDraw
. Modifique la función para que se parezca 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 siguiente línea:
return m_pic.GetPictureDispatch();
return m_pic.GetPictureDispatch();
En la función Set de la propiedad Picture personalizada del control, agregue las líneas siguientes:
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
La propiedad picture debe ser persistente para que la información agregada en tiempo de diseño se muestre en tiempo de ejecución. Agregue la siguiente línea a la función de DoPropExchange
la COleControl
clase derivada:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
Nota:
Los nombres de clase y función pueden diferir del ejemplo anterior.
Después de completar las modificaciones, recompile el proyecto para incorporar la nueva funcionalidad de la propiedad Picture personalizada y usar El contenedor de pruebas para probar la nueva propiedad. Consulte Probar propiedades y eventos con un contenedor de prueba para obtener información acerca de cómo acceder al contenedor de prueba.
Consulte también
Controles ActiveX de MFC
Controles ActiveX de MFC: Usar fuentes
Controles ActiveX de MFC: Páginas de propiedades