Partilhar via


Usando a anotação de mapa de valores

Para criar um mapa de valor

  1. Crie uma cadeia de caracteres de mapeamento.

    Uma cadeia de caracteres de mapeamento é uma lista de valores numéricos de um controle correspondentes a uma cadeia de caracteres legível por humanos em Unicode. Começa com "A:" seguido de um número que indica o tipo de índice utilizado. Apenas índices de imagem são suportados; portanto, o tipo de índice é sempre 0.

    A sequência é seguida por pares de :índice:resultado. O "índice" é um número que representa um índice de imagem para um List-View ou Tree-View, ou o valor para um controle deslizante.

    O valor resultante é um número obtido quando você mapeia a propriedade Role ou State para um controle de exibição de lista ou de árvore. Tais números são expressos em decimal ou hexadecimal com um prefixo "0x".

    A cadeia de caracteres de mapeamento é sempre terminada com dois pontos finais (":").

    A seguir está um exemplo de mapa de anotações para as propriedades Estado e Função de uma caixa de seleção num controlo de exibição de lista ou de árvore. Há dois itens na vista que representam caixas de seleção e cada um tem imagens correspondentes ao estado selecionado e não selecionado.

    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 de 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 colocadas entre aspas e os dois pontos atuam como delimitadores.

    Para obter mais informações, consulte Formato de mapa de anotação.

  2. Crie o gestor de anotações e obtenha um ponteiro para a sua interfaceIAccPropServices.

    Segue-se um exemplo de como criar o gestor 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 a HWND do controle e um ponteiro para a cadeia de caracteres de mapeamento.

    O parâmetro IdProp poderá 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 árvore.
    MSAAPROPID_STATEMAP Para definir um mapa de estado para controles de exibição de lista ou de árvore.
    PROPID_ACC_DESCRIPTIONMAP Para definir um mapa de descrição para visualização em lista ou em árvore.
    MSAAPROPID_VALUEMAP Para definir um mapa de valores em controles deslizantes.

     

  4. Limpeza.

    Antes de destruir qualquer controle anotado de mapa de valor (por exemplo, ao manipular 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 libere o ponteiro para IAccPropServices.

Para obter o código de exemplo, consulte Value Map Annotation Sample.