Macros de mappage de propriétés
Ces macros définissent des mappages de propriétés et des entrées.
Nom | Description |
---|---|
BEGIN_PROP_MAP | Marque le début du mappage de propriétés ATL. |
PROP_DATA_ENTRY | Indique l’étendue ou les dimensions d’un contrôle ActiveX. |
PROP_ENTRY_TYPE | Entre une description de propriété, une propriété DISPID et une page de propriétés CLSID dans la carte de propriétés. |
PROP_ENTRY_TYPE_EX | Entre une description de propriété, une propriété DISPID, une page de propriétés CLSID et IDispatch un IID dans la carte de propriétés. |
PROP_PAGE | Entre une page de propriétés CLSID dans la carte de propriétés. |
END_PROP_MAP | Marque la fin du mappage de propriétés ATL. |
Spécifications
En-tête : atlcom.h
BEGIN_PROP_MAP
Marque le début du mappage de propriétés de l’objet.
BEGIN_PROP_MAP(theClass)
Paramètres
theClass
[in] Spécifie la classe contenant le mappage de propriétés.
Notes
La carte de propriétés stocke les descriptions des propriétés, les DISPID de propriété, les CLSID de page de propriétés et IDispatch
les ID IID. Les classes IPerPropertyBrowsingImpl, IPersistPropertyBagImpl, IPersistStreamInitImpl et ISpecifyPropertyPagesImpl utilisent la carte de propriétés pour récupérer et définir ces informations.
Lorsque vous créez un objet avec l’Assistant Projet ATL, l’Assistant crée un mappage de propriétés vide en spécifiant BEGIN_PROP_MAP suivi de END_PROP_MAP.
BEGIN_PROP_MAP n’enregistre pas l’étendue (c’est-à-dire les dimensions) d’un mappage de propriétés, car un objet utilisant un mappage de propriétés peut ne pas avoir d’interface utilisateur, de sorte qu’il n’aurait aucune étendue. Si l’objet est un contrôle ActiveX avec une interface utilisateur, il a une étendue. Dans ce cas, vous devez spécifier PROP_DATA_ENTRY dans votre carte de propriétés pour fournir l’étendue.
Exemple
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
Indique l’étendue ou les dimensions d’un contrôle ActiveX.
PROP_DATA_ENTRY( szDesc, member, vt)
Paramètres
szDesc
[in] Description de la propriété.
member
[in] Membre de données contenant l’étendue ; par exemple, m_sizeExtent
.
vt
[in] Spécifie le type VARIANT de la propriété.
Notes
Cette macro entraîne la persistance du membre de données spécifié.
Lorsque vous créez un contrôle ActiveX, l’Assistant insère cette macro après la macro de mappage de propriétés BEGIN_PROP_MAP et avant la macro de mappage de propriétés END_PROP_MAP.
Exemple
Dans l’exemple suivant, l’étendue de l’objet (m_sizeExtent
) est conservée.
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
Utilisez cette macro pour entrer une description de propriété, une propriété DISPID et une page de propriétés CLSID dans la carte de propriétés de l’objet.
PROP_ENTRY_TYPE( szDesc, dispid, clsid, vt)
Paramètres
szDesc
[in] Description de la propriété.
dispid
[in] DISPID de la propriété.
clsid
[in] CLSID de la page de propriétés associée. Utilisez la valeur spéciale CLSID_NULL pour une propriété qui n’a pas de page de propriétés associée.
vt
[in] Type de la propriété.
Notes
La macro PROP_ENTRY était non sécurisée et déconseillée. Elle a été remplacée par PROP_ENTRY_TYPE.
La macro BEGIN_PROP_MAP marque le début du mappage de propriétés ; la macro END_PROP_MAP marque la fin.
Exemple
Consultez l’exemple de BEGIN_PROP_MAP.
PROP_ENTRY_TYPE_EX
Similaire à PROP_ENTRY_TYPE, mais vous permet de spécifier un IID particulier si votre objet prend en charge plusieurs interfaces doubles.
PROP_ENTRY_TYPE_EX( szDesc, dispid, clsid, iidDispatch, vt)
Paramètres
szDesc
[in] Description de la propriété.
dispid
[in] DISPID de la propriété.
clsid
[in] CLSID de la page de propriétés associée. Utilisez la valeur spéciale CLSID_NULL pour une propriété qui n’a pas de page de propriétés associée.
iidDispatch
[in] IID de l’interface double définissant la propriété.
vt
[in] Type de la propriété.
Notes
La macro PROP_ENTRY_EX était non sécurisée et déconseillée. Elle a été remplacée par PROP_ENTRY_TYPE_EX.
La macro BEGIN_PROP_MAP marque le début du mappage de propriétés ; la macro END_PROP_MAP marque la fin.
Exemple
L’exemple suivant regroupe les entrées pour IMyDual1
suivies d’une entrée pour IMyDual2
. Le regroupement par interface double améliore les performances.
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
Utilisez cette macro pour entrer un CLSID de page de propriétés dans la carte de propriétés de l’objet.
PROP_PAGE(clsid)
Paramètres
clsid
[in] CLSID d’une page de propriétés.
Notes
PROP_PAGE est similaire à PROP_ENTRY_TYPE, mais ne nécessite pas de description de propriété ou DISPID.
Remarque
Si vous avez déjà entré un CLSID avec PROP_ENTRY_TYPE ou PROP_ENTRY_TYPE_EX, vous n’avez pas besoin d’effectuer une entrée supplémentaire avec PROP_PAGE.
La macro BEGIN_PROP_MAP marque le début du mappage de propriétés ; la macro END_PROP_MAP marque la fin.
Exemple
BEGIN_PROP_MAP(CMyCtrl)
OtherPropMapEntries
PROP_PAGE(CLSID_DatePage)
PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
END_PROP_MAP
Marque la fin du mappage de propriétés de l’objet.
END_PROP_MAP()
Notes
Lorsque vous créez un objet avec l’Assistant Projet ATL, l’Assistant crée un mappage de propriétés vide en spécifiant BEGIN_PROP_MAP suivi de END_PROP_MAP.
Exemple
Consultez l’exemple de BEGIN_PROP_MAP.