Verfügbar machen von Steuerelementen basierend auf Systemsteuerelementen
Sie sollten die Verwendung einer Form von dynamischen Anmerkungen –Direkt, Wertzuordnung oder Server – in Betracht ziehen, bevor Sie die in diesem Abschnitt beschriebene Technik verwenden. Weitere Informationen finden Sie unter Api für dynamische Anmerkungen.
In den meisten Fällen macht Microsoft Active Accessibility Informationen zu übergeordneten oder unterklassigen Steuerelementen verfügbar. Über- und Unterklassen ermöglichen einem Anwendungsentwickler das Erstellen eines benutzerdefinierten Steuerelements mit den grundlegenden Funktionen eines Systemsteuerssystems und das Beinhalten von Verbesserungen, die von der Anwendung bereitgestellt werden. Ein übergeordnetes Steuerelement hat einen anderen Fensterklassennamen als das Systemsteuersystem, auf dem es basiert. Ein Steuerelement mit Unterklassen hat den gleichen Fensterklassennamen. Weitere Informationen zu Übergeordneten und Unterklassen finden Sie in der dokumentation Windows Software Development Kit (SDK).
Da Microsoft Active Accessibility Informationen zu vom System bereitgestellten Steuerelementen verfügbar macht, macht Microsoft Active Accessibility das geänderte Steuerelement verfügbar, es sei denn, ein Steuerelement mit übergeordneten oder unterklassigen Steuerelementen ist erheblich vom Basissteuerelementen. Um zu ermitteln, ob auf das geänderte Steuerelement zugegriffen werden kann, sollten Anwendungsentwickler Hilfsprogramme wie Inspect und Accessible Event Watcher verwenden, um das Verhalten des geänderten Steuerelements mit dem Basissteuerfeld zu vergleichen.
Wenn Sie nach der Verwendung dieser Hilfsprogramme feststellen, dass auf das geänderte Steuerelement nicht zugegriffen werden kann, müssen Sie das Steuerelement wie jedes andere benutzerdefinierte Steuerelement behandeln. Das Steuerelement muss Ereignisse auslösen, und die Fensterprozedur der Anwendung muss auf die WM _ GETOBJECT-Nachrichtreagieren, indem eine IAccessible-Schnittstelle zur Verfügung stellen, die Clientanwendungen verwenden, um Informationen über das Steuerelement zu erhalten.
CreateStdAccessibleProxy und CreateStdAccessibleObject
Wenn alle oder die meisten IAccessible-Eigenschaften für das geänderte Steuerelement mit dem Basissteuerobjekt identisch sind, verwenden Sie CreateStdAccessibleProxy oder CreateStdAccessibleObject, um die Implementierung der IAccessible-Schnittstelle des Steuerelements zu vereinfachen.
Hinweis
Beachten Sie beim Übergeordneten oder Unterklassen eines barrierefreien Steuerelements, dass das von der CreateStdAccessibleObject-Funktion abgerufene Objekt möglicherweise mehr als nur die IAccessible-Schnittstelle implementiert. Sie kann auch andere Schnittstellen wie IEnumVARIANT enthalten. Möglicherweise müssen Sie diese zusätzlichen Schnittstellen umschließen, um die Barrierefreiheitsunterstützung zu erhalten, die durch die ursprüngliche Einführung des Steuerelements bereitgestellt wird.
Die Funktionen CreateStdAccessibleProxy und CreateStdAccessibleObject rufen einen IAccessible-Schnittstellenzeiger für das angegebene Systemsteuerfeld ab. Der Unterschied bei diesen Funktionen ist, dass CreateStdAccessibleObject den Fensterklassennamen verwendet, der aus dem hwnd-Parameter ermittelt wurde, während CreateStdAccessibleProxy den im szClassName-Parameter angegebenen Fensterklassennamen verwendet. Wenn Sie sich für diese Funktionen entscheiden, verwenden Sie daher CreateStdAccessibleProxy, um Informationen zu steuerelementen mit Übergeordneten Klasse und beide Funktionen mit Steuerelementen mit Unterklassen verfügbar zu machen.
Nachdem Sie einen IAccessible-Schnittstellenzeiger auf das Systemsteuerfeld erhalten haben, verwenden Sie den Zeiger in Ihrer Implementierung der IAccessible-Schnittstelle für das geänderte Steuerelement. Wenn eine Eigenschaft oder Methode für das geänderte Steuerelement mit dem Basissteuerfeld identisch ist, verwenden Sie den IAccessible-Zeiger, um die vom Basissteuerfeld bereitgestellten Informationen zurück zu geben. Wenn sich eine Eigenschaft für das geänderte Steuerelement vom Basissteuersystem abwandelt, überschreiben Sie die -Eigenschaft des Basissteuerpunkts.
Im folgenden Beispiel ist CAccCustomButton die von IAccessibleabgeleitete anwendungsdefinierte Klasse. Die Membervariable _ m pAccDefaultButton ist ein Zeiger auf eine IAccessible-Schnittstelle, die während der Initialisierung für das Steuerelement von CreateStdAccessibleObject abgerufen wurde. In diesem Beispiel ist die Role-Eigenschaft für das benutzerdefinierte Steuerelement identisch mit der Role-Eigenschaft des Systemsteuerpunkts, sodass die Role-Eigenschaft des Basissteuersteuerpunkts zurückgegeben wird. Die Description-Eigenschaft ist jedoch anders als die des Basissteuerpunkts, sodass diese Eigenschaft überschrieben wird.
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;
}
Weitere Informationen zu den IAccessible-Eigenschaften und -Methoden von Systemsteuerelementen finden Sie unter Anhang A: Supported Benutzeroberfläche Elements Reference(Referenz zu unterstützten Benutzeroberfläche Elementen).