Usando anotação de mapa de valor
Para criar um mapa de valores
Crie uma cadeia de caracteres de mapeamento.
Uma cadeia de caracteres de mapeamento é uma lista dos valores numéricos de um controle correspondentes a uma cadeia de caracteres legível por humanos em Unicode. Ele começa com "A:" seguido por um número que indica o tipo de índice usado. Há suporte apenas para índices de imagem; portanto, o tipo de índice é sempre 0.
A cadeia de caracteres é seguida por :index:result pairs. O "índice" é um número que representa um índice de imagem para um List-View ou Modo de Exibição de Árvore ou o valor de um controle deslizante.
O valor resultante é um número obtido quando você mapeia a propriedade Role ou State para uma exibição de lista ou controle de exibição de árvore. Esses números são expressos em decimal ou hexadecimal com um prefixo "0x".
A cadeia de caracteres de mapeamento sempre é encerrada com dois-pontos finais (":").
Veja a seguir um exemplo de um mapa de anotação para as propriedades Estado e Função de uma caixa marcar em um modo de exibição de lista ou controle de exibição de árvore. Há dois itens no modo de exibição que representam marcar caixas e cada um tem imagens correspondentes ao estado marcado e desmarcado.
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":";
Para obter valores válidos de Função e Estado, consulte Funções de objeto e constantes de estado do objeto.
O valor do índice pode ser negativo quando você mapeia propriedades para um controle deslizante.
Quando você mapeia uma propriedade Value ou Description, o resultado é uma cadeia de caracteres. As cadeias de caracteres não são citadas e os dois-pontos agem como delimitadores.
Para obter mais informações, consulte Formato de mapa de anotação.
Crie o gerenciador de anotações e obtenha um ponteiro para sua interface IAccPropServices.
Veja a seguir um exemplo de como criar o gerenciador de anotações.
IAccPropServices * pAccPropSvc = NULL; HRESULT hr = CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER, IID_IAccPropServices, (void**) & pAccPropSvc));
Anexe a cadeia de caracteres de mapeamento ao controle .
Chame IAccPropServices::SetHwndPropStr, passando o HWND do controle e um ponteiro para a cadeia de caracteres de mapeamento.
O parâmetro IdProp será um dos seguintes.
Parâmetro Usado para MSAAPROPID_ROLEMAP Para definir um mapa de funções para controles de exibição de lista ou de exibição de árvore. MSAAPROPID_STATEMAP Para definir um mapa de estado para exibição de lista ou controles de exibição de árvore. PROPID_ACC_DESCRIPTIONMAP Para definir um mapa de descrição para exibição de lista ou exibições de árvore. MSAAPROPID_VALUEMAP Para definir um mapa de valor em controles deslizantes. Limpe- se.
Antes de destruir quaisquer controles anotados de mapa de valor (por exemplo, ao lidar com WM_DESTROY), você deve limpar as propriedades registradas anteriormente e liberar o gerenciador de anotações.
Para fazer isso, chame IAccPropServices::ClearHwndProps conforme apropriado e solte o ponteiro para IAccPropServices.
Para obter o código de exemplo, consulte Exemplo de anotação de mapa de valor.