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.