Vystavení ovládacích prvků na základě systémových ovládacích prvků
Než se pokusíte o techniku popsanou v této části, měli byste zvážit použití nějaké formy dynamické poznámky – přímé, mapy hodnot nebo serveru. Další informace najdete v tématu rozhraní API dynamické poznámky.
Ve většině případů microsoft Active Accessibility zveřejňuje informace o nadtříděných nebo podtříděných ovládacích prvcích. Nadtřídy a podtřídy umožňují vývojáři aplikací vytvořit vlastní ovládací prvek se základními funkcemi ovládacího prvku systému a zahrnout vylepšení poskytovaná aplikací. Nadtříděný ovládací prvek má jiný název třídy okna než systémový ovládací prvek, na kterém je založen. Podtříděný ovládací prvek má stejný název třídy okna. Další informace o nadtřídě a podtřídě naleznete v dokumentaci k sadě Windows Software Development Kit (SDK).
Vzhledem k tomu, že microsoft Active Accessibility zveřejňuje informace o systémových ovládacích prvcích, microsoft Active Accessibility zveřejňuje změněný ovládací prvek, pokud se nadtříděný nebo podtříděný ovládací prvek výrazně neliší od základního ovládacího prvku. Pokud chcete zjistit, jestli je upravený ovládací prvek přístupný, vývojáři aplikací by měli použít nástroje, jako je Kontrola a Přístupné sledování událostí, porovnat chování upraveného ovládacího prvku se základním ovládacím prvku.
Pokud po použití těchto nástrojů zjistíte, že změněný ovládací prvek není přístupný, musíte s ním zacházet jako s jinými vlastními ovládacími prvky. Ovládací prvek musí aktivovat události a procedura okna aplikace musí reagovat na zprávu WM_GETOBJECTzadáním IAccessible rozhraní, které klientské aplikace používají k získání informací o ovládacím prvku.
CreateStdAccessibleProxy a CreateStdAccessibleObject
Pokud jsou všechny nebo většina vlastností IAccessible pro upravený ovládací prvek stejná jako základní ovládací prvek, použijte CreateStdAccessibleProxy nebo CreateStdAccessibleObject zjednodušit implementaci IAccessible rozhraní ovládacího prvku.
Poznámka
Při supertřídě nebo podtřídě přístupného ovládacího prvku mějte na paměti, že objekt načtený funkcí CreateStdAccessibleObject může implementovat více než jen IAccessible rozhraní. Může obsahovat další rozhraní, jako je IEnumVARIANT. Možná budete muset tato další rozhraní zabalit, aby se zachovala podpora přístupnosti, kterou poskytuje původní implemenace ovládacího prvku.
Funkce CreateStdAccessibleProxy a CreateStdAccessibleObject načtou ukazatel rozhraní IAccessible pro zadaný systémový ovládací prvek. Rozdíl v těchto funkcích spočívá v tom, že CreateStdAccessibleObject používá název třídy okna získaný z jeho hwnd parametr, zatímco CreateStdAccessibleProxy používá název třídy okna zadaný v jeho szClassName parametru. Proto pokud se rozhodnete tyto funkce používat, použijte CreateStdAccessibleProxy k zveřejnění informací o nadtříděných ovládacích prvcích a obou funkcích s podtříděnými ovládacími prvky.
Po získání ukazatele rozhraní IAccessible na ovládací prvek systému použijte ukazatel ve své implementaci rozhraní IAccessible pro upravený ovládací prvek. Pokud je vlastnost nebo metoda pro upravený ovládací prvek stejná jako základní ovládací prvek, použijte IAccessible ukazatel vrátit informace poskytnuté základním ovládacím prvku. Pokud se vlastnost upraveného ovládacího prvku liší od základního ovládacího prvku, přepište vlastnost základního ovládacího prvku.
V následujícím příkladu CAccCustomButton je třída definovaná aplikací odvozená z IAccessible. Členská proměnná m_pAccDefaultButton je ukazatelem na rozhraní IAccessible, která byla získána z CreateStdAccessibleObject během inicializační procedury ovládacího prvku. V tomto příkladu je vlastnost Role vlastního ovládacího prvku stejná jako vlastnost Role systémového ovládacího prvku, takže se vrátí vlastnost Role základního ovládacího prvku. Vlastnost Description se však liší od vlastnosti základního ovládacího prvku, takže tato vlastnost je přepsána.
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;
}
Další informace o IAccessible vlastnosti a metody ovládacích prvků systému naleznete v Příloha A: Podporované prvky uživatelského rozhraní referenční.