Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Você deve considerar o uso de alguma forma de Anotação Dinâmica — Direta, Mapa de Valor ou Servidor — antes de tentar a técnica descrita nesta seção. Para mais informações, consulte a API de Anotação Dinâmica .
Na maioria dos casos, o Microsoft Ative Accessibility expõe informações sobre controles superclassificados ou subclassificados. Superclassificação e subclassificação permitem que um desenvolvedor de aplicativos crie um controle personalizado com a funcionalidade básica de um controle de sistema e inclua aprimoramentos fornecidos pelo aplicativo. Um controle superclassificado tem um nome de classe de janela diferente do controle do sistema no qual ele se baseia. Um controle subclassificado tem o mesmo nome de classe de janela. Para obter mais informações sobre superclassificação e subclassificação, consulte a documentação do Windows Software Development Kit (SDK).
Como o Microsoft Ative Accessibility expõe informações sobre controles fornecidos pelo sistema, o Microsoft Ative Accessibility expõe o controle modificado, a menos que um controle superclassificado ou subclassificado seja significativamente diferente do controle base. Para determinar se o controle modificado está acessível, os desenvolvedores de aplicativos devem usar utilitários como Inspect e Accessible Event Watcher para comparar o comportamento do controle modificado com o controle base.
Se depois de usar esses utilitários você determinar que o controle modificado não está acessível, você deve tratar o controle como qualquer outro controle personalizado. O controlo deve disparar eventos, e o procedimento da janela da aplicação deve responder à mensagem WM_GETOBJECTfornecendo uma interface IAccessible que é utilizada por aplicações cliente para obter informações sobre o controlo.
CreateStdAccessibleProxy e CreateStdAccessibleObject
Se todas ou a maioria das propriedades IAccessible para o controle modificado forem as mesmas que o controle base, use CreateStdAccessibleProxy ou CreateStdAccessibleObject para simplificar a implementação da interface IAccessible do controle.
Observação
Ao sobreclassificar ou subclassificar um controle acessível, esteja ciente de que o objeto recuperado pela funçãoCreateStdAccessibleObject pode implementar mais do que apenas a interfaceIAccessible. Pode incluir outras interfaces como IEnumVARIANT. Talvez seja necessário encapsular essas interfaces adicionais para manter o suporte de acessibilidade fornecido pela implementação original do controle.
As funções CreateStdAccessibleProxy e CreateStdAccessibleObject recuperam um ponteiro de interface IAccessible para o controlo de sistema especificado. A diferença dessas funções é que CreateStdAccessibleObject usa o nome da classe janela obtido do seu parâmetro hwnd, ao passo que CreateStdAccessibleProxy usa o nome da classe janela especificado no seu parâmetro szClassName. Portanto, se você decidir usar essas funções, use CreateStdAccessibleProxy para expor informações sobre controles superclassificados e qualquer função com controles subclassificados.
Depois de obter um ponteiro de interface IAccessible para o controlo do sistema, utilize o ponteiro na sua implementação da interface IAccessible para o controlo modificado. Se uma propriedade ou método para o controle modificado for o mesmo que o controle base, use o ponteiro IAccessible para retornar as informações fornecidas pelo controle base. Se uma propriedade para o controle modificado for diferente do controle base, substitua a propriedade do controle base.
No exemplo a seguir, CAccCustomButton é a classe definida pelo aplicativo derivada de IAccessible. A variável membro m_pAccDefaultButton é um ponteiro para uma interface IAccessible que foi recuperada de CreateStdAccessibleObject durante o procedimento de inicialização para o controle. Neste exemplo, a propriedade Role para o controle personalizado é a mesma que a propriedade Role do controle do sistema, portanto, a propriedade Role do controle base é retornada. No entanto, a propriedade Description é diferente da propriedade do controle base, portanto, essa propriedade é substituída.
HRESULT CAccCustomButton::Initialize( HWND hWnd, HINSTANCE hInst )
{
.
.
.
hr = CreateStdAccessibleObject( m_hWnd,
OBJID_CLIENT,
IID_IAccessible,
(void **) &m__pAccDefaultButton );
.
.
.
}
STDMETHODIMP CAccCustomButton::get_accRole( VARIANT varID )
{
return m_pAccDefaultButton->get_accRole(varID);
}
STDMETHODIMP CAccCustomButton::get_accDescription( VARIANT varChild,
BSTR* pszDesc )
{
TCHAR szString[256];
OLECHAR wszString[256];
LoadString( m_hInst, ID_DESCRIPTION, szString, 256 );
MultiByteToWideChar( CP_ACP, 0, szString, -1, wszString, 256 );
*pszDesc = SysAllocString( wszString );
if ( !pszDesc )
return S_OK;
else
return E_OUTOFMEMORY;
}
Para obter mais informações sobre o IAccessible propriedades e métodos de controles do sistema, consulte Apêndice A: Elementos de interface do usuário suportados.