Hosten eines fensterlosen ACTIVEX-Steuerelements in MSAA
Erfahren Sie, wie Sie einen Steuerelementcontainer erstellen, der fensterlose Microsoft ActiveX-Steuerelemente hosten kann, die Microsoft Active Accessibility implementieren. Indem Sie die hier beschriebenen Schritte ausführen, können Sie sicherstellen, dass alle fensterlosen Steuerelemente ohne Microsoft Active-Barrierefreiheit, die in Ihrem Steuerungscontainer gehostet werden, für AT-Clientanwendungen (Assistive Technology) zugänglich sind.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Programmierung von Microsoft Win32 und Component Object Model (COM)
- Fensterlose ActiveX-Steuerelemente
- Microsoft Active Accessibility-Server
Anweisungen
Schritt 1: Geben Sie die IAccessible-Stammschnittstelle im Namen des fensterlosen Steuerelements an.
Wenn das System den IAccessible-Zeiger für den Stamm eines fensterlosen Steuerelements benötigt, fragt das System den Steuerelementcontainer ab. Um den Zeiger abzurufen, ruft der Container die Implementierung des fensterlosen Steuerelements der IServiceProvider::QueryService-Methode auf.
Wenn der Steuerelementcontainer über eine Microsoft Active Accessibility-Implementierung verfügt, kann er den IAccessible-Zeiger des fensterlosen Steuerelements auf das System zurückgeben.
Wenn der Steuerelementcontainer über eine Microsoft Benutzeroberflächenautomatisierung-Implementierung verfügt, rufen Sie die UiaProviderFromIAccessible-Funktion auf, um einen IRawElementProviderSimple-Schnittstellenzeiger zu erhalten, der das Steuerelement darstellt, und geben Sie dann den IRawElementProviderSimple-Schnittstellenzeiger an das System zurück.
Schritt 2: Antworten Sie im Namen des fensterlosen Steuerelements auf die WM_GETOBJECT Nachricht.
Wenn eine Clientanwendung auf ein winEvent antwortet, das von einem fensterlosen Steuerelement ausgelöst wird, empfängt der Steuerelementcontainer eine WM_GETOBJECT Nachricht im Namen des Steuerelements. Die Nachricht enthält die Objekt-ID des fensterlosen Steuerelements, das das Ereignis ausgelöst hat.
Der Steuerelementcontainer antwortet, indem er das fensterlose Steuerelement sucht, das die Objekt-ID besitzt, und dann die IAccessibleHandler::AccessibleObjectFromID-Methode dieses Steuerelements aufruft. Die AccessibleObjectFromID-Methode gibt den IAccessible-Schnittstellenzeiger für das Ui-Element zurück, und der Steuerelementcontainer gibt den Zeiger auf das System zurück, das ihn an die Clientanwendung weiterleitet.
Schritt 3: Implementieren der IAccessibleWindowlessSite-Schnittstelle.
Implementieren Sie die IAccessibleWindowlessSite::GetParentAccessible-Methode .
Wenn eine Clientanwendung Barrierefreiheitsinformationen über das übergeordnete Element des Stammanbieters des fensterlosen Steuerelements benötigt, ruft das System die IAccessible::get_accParent-Methode des fensterlosen Steuerelements auf. Das Steuerelement antwortet, indem es die IAccessibleWindowlessSite::GetParentAccessible-Methode des Steuerelementcontainers aufruft, die den IAccessible-Zeiger des übergeordneten Steuerelements des fensterlosen Steuerelements bereitstellt.
Implementieren Sie die Methoden IAccessibleWindowlessSite::AcquireObjectIdRange, QueryObjectIdRange und ReleaseObjectIdRange .
Ihr Steuerelementcontainer muss eine Zuordnung von Objekt-ID-Bereichen zu fensterlosen Steuerelementen verwalten. Die Zuordnung ermöglicht es dem Steuerelementcontainer, das Steuerelement zu identifizieren, das auf eine bestimmte Anforderung für eine Objekt-ID reagieren soll. Die folgende Tabelle zeigt ein Beispiel für das Zuordnen von Objekt-ID-Bereichen zu fensterlosen Steuerelementen.
Bereichsbasis Bereichsgröße Control 1000 500 Steuerelement 1 1500 1000 Steuerelement 2 2500 2000 Steuerelement 1 Der Steuerelementcontainer muss die Zuordnung von Objekt-ID-Bereichen zu fensterlosen Steuerelementen für sich selbst und alle fensterlosen untergeordneten Elemente beibehalten. Die Objekt-ID-Bereiche müssen nicht nebeneinander liegen. Um Denial-of-Service-Angriffe zu vermeiden, kann der Steuerungscontainer außerdem Grenzwerte für die Anzahl von Bereichen festlegen, die einem bestimmten Steuerelement gewährt werden. Es ist jedoch hilfreich, mehr als einen Bereich pro Steuerelement zuzulassen, damit ein Steuerelement vergrößert werden kann.
Schritt 4: Optional: Implementieren Sie die IAccessibleHostingElementProviders-Schnittstelle.
Implementieren Sie die IAccessibleHostingElementProviders-Schnittstelle, wenn Ihr Steuerelementcontainer über eine Microsoft Active Accessibility-Serverimplementierung verfügt und der Server der Stamm einer Barrierefreiheitsstruktur ist, die fensterlose ActiveX-Steuerelemente enthält, die Benutzeroberflächenautomatisierung unterstützen. Die IAccessibleHostingElementProviders-Schnittstelle verfügt über eine einzelne Methode, GetEmbeddedFragmentRoots, die die IRawElementProviderFragmentRoot-Schnittstellenzeiger aller Benutzeroberflächenautomatisierung fensterlosen ActiveX-Steuerelemente abruft, die von Ihrem Steuerelementcontainer gehostet werden.
Zugehörige Themen