Partilhar via


Como hospedar um controle ActiveX sem janelas msaa

Saiba como criar um contêiner de controle que pode hospedar controles Microsoft ActiveX sem janelas que implementam a Acessibilidade Ativa da Microsoft. Seguindo as etapas descritas aqui, você pode garantir que todos os controles sem janelas baseados em Acessibilidade Ativa da Microsoft hospedados em seu contêiner de controle estejam acessíveis a aplicativos cliente at (tecnologia adaptativa).

O que você precisa saber

Tecnologias

Pré-requisitos

  • C/C++
  • Programação do Microsoft Win32 e do COM (Component Object Model)
  • Controles ActiveX sem janelas
  • Servidores de Acessibilidade Ativa da Microsoft

Instruções

Etapa 1: forneça a interface IAccessible raiz em nome do controle sem janelas.

Sempre que o sistema precisar do ponteiro IAccessible para a raiz de um controle sem janelas, o sistema consultará o contêiner de controle. Para recuperar o ponteiro, o contêiner chama a implementação do controle sem janelas do método IServiceProvider::QueryService .

Se o contêiner de controle tiver uma implementação de Acessibilidade Ativa da Microsoft, ele poderá retornar o ponteiro IAccessible do controle sem janelas para o sistema.

Se o contêiner de controle tiver uma implementação do Microsoft Automação da Interface do Usuário, chame a função UiaProviderFromIAccessible para obter um ponteiro de interface IRawElementProviderSimple que representa o controle e, em seguida, retorne o ponteiro da interface IRawElementProviderSimple para o sistema.

Etapa 2: responder à mensagem WM_GETOBJECT em nome do controle sem janelas.

Quando um aplicativo cliente responde a um WinEvent gerado por um controle sem janelas, o contêiner de controle recebe uma mensagem WM_GETOBJECT em nome do controle. A mensagem inclui a ID do objeto do controle sem janelas que gerou o evento.

O contêiner de controle responde pesquisando o controle sem janelas que "possui" a ID do objeto e, em seguida, chamando o método IAccessibleHandler::AccessibleObjectFromID desse controle. O método AccessibleObjectFromID retorna o ponteiro de interface IAccessible para o item de interface do usuário e o contêiner de controle retorna o ponteiro para o sistema, que o encaminha para o aplicativo cliente.

Etapa 3: implementar a interface IAccessibleWindowlessSite.

  1. Implemente o método IAccessibleWindowlessSite::GetParentAccessible .

    Quando um aplicativo cliente precisa de informações de acessibilidade sobre o pai do provedor raiz do controle sem janelas, o sistema chama o método IAccessible::get_accParent do controle sem janelas. O controle responde chamando o método IAccessibleWindowlessSite::GetParentAccessible do contêiner de controle, que fornece o ponteiro IAccessible do pai do controle sem janelas.

  2. Implemente os métodos IAccessibleWindowlessSite::AcquireObjectIdRange, QueryObjectIdRange e ReleaseObjectIdRange .

    O contêiner de controle deve manter um mapeamento de intervalos de ID de objeto para controles sem janelas. O mapeamento permite que o contêiner de controle identifique o controle que deve responder a uma solicitação específica para uma ID de objeto. A tabela a seguir mostra um exemplo de mapeamento de intervalos de ID de objeto para controles sem janelas.

    Base de intervalo Tamanho do intervalo Control
    1000 500 Controle 1
    1500 1000 Controle 2
    2500 2000 Controle 1

     

    O contêiner de controle deve manter o mapeamento de intervalos de ID de objeto para controles sem janelas para si mesmo e todos os filhos sem janelas. Os intervalos de ID de objeto não precisam ser adjacentes uns aos outros. Além disso, para evitar ataques de negação de serviço, o contêiner de controle pode colocar limites no número de intervalos que são concedidos a um controle específico. No entanto, é útil permitir mais de um intervalo por controle para permitir que um controle cresça.

Etapa 4: opcional: implementar a interface IAccessibleHostingElementProviders.

Implemente a interface IAccessibleHostingElementProviders se o contêiner de controle tiver uma implementação de servidor de Acessibilidade Ativa da Microsoft e o servidor for a raiz de uma árvore de acessibilidade que inclui controles ActiveX sem janelas que dão suporte a Automação da Interface do Usuário. A interface IAccessibleHostingElementProviders tem um único método, GetEmbeddedFragmentRoots, que recupera os ponteiros da interface IRawElementProviderFragmentRoot de todos os Automação da Interface do Usuário controles ActiveX sem janelas hospedados pelo contêiner de controle.

Como hospedar um Automação da Interface do Usuário controle ActiveX sem janelas

Acessibilidade de controle ActiveX sem janelas