Compartir vía


Macros de mapa de propiedades

Estas macros definen los mapas de propiedades y las entradas.

Nombre Descripción
BEGIN_PROP_MAP Marca el principio del mapa de propiedades ATL.
PROP_DATA_ENTRY Indica la extensión, o dimensiones, de un control ActiveX.
PROP_ENTRY_TYPE Escribe una descripción de la propiedad, el DISPID de la propiedad y el CLSID de la página de propiedades en el mapa de propiedades.
PROP_ENTRY_TYPE_EX Escribe una descripción de la propiedad, propiedad DISPID, CLSID de la página de propiedades y el IDispatch IID en el mapa de propiedades.
PROP_PAGE Escribe un CLSID de la página de propiedades en el mapa de propiedades.
END_PROP_MAP Marca el final del mapa de propiedades ATL.

Requisitos

Encabezado: atlcom.h

BEGIN_PROP_MAP

Marca el principio del mapa de propiedades del objeto.

BEGIN_PROP_MAP(theClass)

Parámetros

theClass
[in] Especifica la clase que contiene el mapa de propiedades.

Comentarios

El mapa de propiedades almacena descripciones de propiedades, propiedades DISPID, CLSID de la página de propiedades e IDispatch IID. Clases IPerPropertyBrowsingImpl, IPersistPropertyBagImpl, IPersistStreamInitImpl e ISpecifyPropertyPagesImpl usan el mapa de propiedades para recuperar y establecer esta información.

Cuando cree un objeto con el Asistente para proyectos ATL, el asistente creará un mapa de propiedades vacío al especificar BEGIN_PROP_MAP seguido de END_PROP_MAP.

BEGIN_PROP_MAP no guarda la extensión (es decir, las dimensiones) de un mapa de propiedades, ya que es posible que un objeto que use un mapa de propiedades no tenga una interfaz de usuario, por lo que no tendría ninguna extensión. Si el objeto es un control ActiveX con una interfaz de usuario, esta tiene una extensión. En este caso, debe especificar PROP_DATA_ENTRY en el mapa de propiedades para proporcionar la extensión.

Ejemplo

BEGIN_PROP_MAP(CMyPropCtrl)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
   PROP_ENTRY_TYPE("Property1", 1, CLSID_MyPropPage1, VT_BSTR)
   PROP_ENTRY_TYPE_EX("Caption", DISPID_CAPTION, CLSID_MyPropPage2, IID_IMyDual1, VT_BSTR)
   PROP_ENTRY_INTERFACE_CALLBACK("CorrectParamCallback", 0, CLSID_MyPropPage1, AllowedCLSID, VT_DISPATCH)
   PROP_ENTRY_INTERFACE_CALLBACK_EX("CorrectParamCallbackEx", 1, IID_IMyDual1, CLSID_MyPropPage2, AllowedCLSID, VT_UNKNOWN)
   PROP_PAGE(CLSID_MyPropPage3)
END_PROP_MAP()

PROP_DATA_ENTRY

Indica la extensión, o dimensiones, de un control ActiveX.

PROP_DATA_ENTRY( szDesc, member, vt)

Parámetros

szDesc
[in] Descripción de la propiedad.

member
[in] El miembro de datos que contiene la extensión; por ejemplo, m_sizeExtent.

vt
[in] Especifica el tipo VARIANT de la propiedad.

Comentarios

Esta macro hace que se conserve el miembro de datos especificado.

Al crear un control ActiveX, el asistente inserta esta macro después de la macro de mapa de propiedades BEGIN_PROP_MAP y antes de la macro de mapa de propiedades END_PROP_MAP.

Ejemplo

En el ejemplo siguiente, se conserva la extensión del objeto (m_sizeExtent).

BEGIN_PROP_MAP(CMyWindow)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
END_PROP_MAP()

 

BEGIN_PROP_MAP(CMyCompositeCtrl)
   PROP_DATA_ENTRY("Width", m_nWidth, VT_UI4)
   PROP_DATA_ENTRY("Height", m_nHeight, VT_UI4)
END_PROP_MAP()

PROP_ENTRY_TYPE

Use esta macro para escribir una descripción de propiedad, una propiedad DISPID y el CLSID de la página de propiedades en el mapa de propiedades del objeto.

PROP_ENTRY_TYPE( szDesc, dispid, clsid, vt)

Parámetros

szDesc
[in] Descripción de la propiedad.

dispid
[in] DISPID de la propiedad.

clsid
[in] CLSID de la página de propiedades asociada. Use el valor especial CLSID_NULL para una propiedad que no tenga una página de propiedades asociada.

vt
[in] Tipo de la propiedad.

Comentarios

La macro PROP_ENTRY era insegura y estaba en desuso. Se ha reemplazado por PROP_ENTRY_TYPE.

La macro BEGIN_PROP_MAP marca el principio del mapa de propiedades y la macro END_PROP_MAP marca el final.

Ejemplo

Consulte el ejemplo de BEGIN_PROP_MAP.

PROP_ENTRY_TYPE_EX

Es similar a PROP_ENTRY_TYPE, pero permite especificar un IID determinado si el objeto admite varias interfaces duales.

PROP_ENTRY_TYPE_EX( szDesc, dispid, clsid, iidDispatch, vt)

Parámetros

szDesc
[in] Descripción de la propiedad.

dispid
[in] DISPID de la propiedad.

clsid
[in] CLSID de la página de propiedades asociada. Use el valor especial CLSID_NULL para una propiedad que no tenga una página de propiedades asociada.

iidDispatch
[in] El IID de la interfaz dual que define la propiedad.

vt
[in] Tipo de la propiedad.

Comentarios

La macro PROP_ENTRY_EX era insegura y estaba en desuso. Se ha reemplazado por PROP_ENTRY_TYPE_EX.

La macro BEGIN_PROP_MAP marca el principio del mapa de propiedades y la macro END_PROP_MAP marca el final.

Ejemplo

En el ejemplo siguiente agrupa las entradas para IMyDual1 seguidas de una entrada para IMyDual2. La agrupación por interfaz dual mejorará el rendimiento.

BEGIN_PROP_MAP(CAtlEdit)
   PROP_ENTRY_TYPE_EX("Caption", DISPID_CAPTION, CLSID_MyPropPage2, IID_IMyDual1, VT_BSTR)
   PROP_ENTRY_TYPE_EX("Enabled", DISPID_ENABLED, CLSID_MyPropPage2, IID_IMyDual1, VT_BOOL)
   PROP_ENTRY_TYPE_EX("Width", DISPID_DRAWWIDTH, CLSID_MyPropPage2, IID_IMyDual2, VT_UINT)
END_PROP_MAP()

PROP_PAGE

Use esta macro para escribir un CLSID de la página de propiedades en el mapa de propiedades del objeto.

PROP_PAGE(clsid)

Parámetros

clsid
[in] CLSID de una página de propiedades.

Comentarios

PROP_PAGE se parece a PROP_ENTRY_TYPE, pero no requiere una descripción de propiedad o DISPID.

Nota:

Si ya ha escrito un CLSID con PROP_ENTRY_TYPE o PROP_ENTRY_TYPE_EX, no hace falta hacer una entrada adicional con PROP_PAGE.

La macro BEGIN_PROP_MAP marca el principio del mapa de propiedades y la macro END_PROP_MAP marca el final.

Ejemplo

BEGIN_PROP_MAP(CMyCtrl)
   OtherPropMapEntries
   PROP_PAGE(CLSID_DatePage)
   PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

END_PROP_MAP

Marca el final del mapa de propiedades del objeto.

END_PROP_MAP()

Comentarios

Cuando cree un objeto con el Asistente para proyectos ATL, el asistente creará un mapa de propiedades vacío al especificar BEGIN_PROP_MAP seguido de END_PROP_MAP.

Ejemplo

Consulte el ejemplo de BEGIN_PROP_MAP.

Consulte también

Macros