Usando anotação de mapa de valor

Para criar um mapa de valores

  1. 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.

  2. 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));
    
    
  3. 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.

     

  4. 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.