Utilisation de l’annotation de mappage de valeurs
Pour créer une carte de valeurs
Créez une chaîne de mappage.
Une chaîne de mappage est une liste des valeurs numériques d’un contrôle correspondant à une chaîne lisible par l’homme dans Unicode. Il commence par « A: » suivi d’un nombre qui indique le type d’index utilisé. Seuls les index d’images sont pris en charge ; par conséquent, le type d’index est toujours 0.
La chaîne est suivie de paires :index:result. « index » est un nombre qui représente un index d’image pour un List-View ou arborescence, ou la valeur d’un contrôle de curseur.
La valeur résultante est un nombre obtenu lorsque vous mappez la propriété Role ou State pour un contrôle d’affichage liste ou d’arborescence. Ces nombres sont exprimés en décimal ou hexadécimal avec un préfixe « 0x ».
La chaîne de mappage se termine toujours par un signe deux-points final (« : »).
Voici un exemple de mappage d’annotations pour les propriétés State et Role d’une zone case activée dans un contrôle d’arborescence ou d’affichage de liste. Il existe deux éléments dans la vue qui représentent case activée zones, et chacune a des images correspondant à l’état coché et non coché.
LPCWSTR g_ListOrTreeStateMap = L"A:0" // Index type; always 0. ! L":0:0x00" // Image 0 is normal ! L":1:0x10" // Image 1 is checked - STATE_SYSTEM_CHECKED (0x10) ! L":"; LPCWSTR g_ListOrTreeRoleMap = L"A:0" // Index type; always 0. ! L":0:0x2C" // Image 0 is a check box - ROLE_SYSTEM_CHECKBUTTON (0x2c) ! L":1:0x2C" // image 1 is also a check box ! L":";
Pour obtenir des valeurs de rôle et d’état valides, consultez Rôles d’objet et Constantes d’état d’objet.
La valeur d’index peut être négative lorsque vous mappez des propriétés pour un contrôle de curseur.
Lorsque vous mappez une propriété Value ou Description, le résultat est une chaîne. Les chaînes ne sont pas entre guillemets et les deux-points jouent le rôle de délimiteurs.
Pour plus d’informations, consultez Annotation Map Format.
Créez le gestionnaire d’annotations et obtenez un pointeur vers son interface IAccPropServices.
Voici un exemple de création du gestionnaire d’annotations.
IAccPropServices * pAccPropSvc = NULL; HRESULT hr = CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER, IID_IAccPropServices, (void**) & pAccPropSvc));
Attachez la chaîne de mappage au contrôle.
Appelez IAccPropServices::SetHwndPropStr, en passant le HWND du contrôle et un pointeur vers la chaîne de mappage.
Le paramètre IdProp sera l’un des éléments suivants.
Paramètre Utilisé pour MSAAPROPID_ROLEMAP Pour définir une carte de rôle pour les contrôles d’affichage liste ou d’arborescence. MSAAPROPID_STATEMAP Pour définir une carte d’état pour les contrôles d’affichage de liste ou d’arborescence. PROPID_ACC_DESCRIPTIONMAP Pour définir une carte de description pour l’affichage liste ou l’arborescence. MSAAPROPID_VALUEMAP Pour définir une carte de valeurs sur les contrôles de curseur. Nettoyer.
Avant de détruire les contrôles annotés de mappage de valeurs (par exemple, lors de la gestion des WM_DESTROY), vous devez effacer les propriétés précédemment inscrites et libérer le gestionnaire d’annotations.
Pour ce faire, appelez IAccPropServices::ClearHwndProps comme il convient et relâchez votre pointeur vers IAccPropServices.
Pour obtenir un exemple de code, consultez Exemple d’annotation de mappage de valeurs.