Freigeben über


Räumliche und logische Navigation

Clients rufen Informationen zu einem Objekt ab, das sich in räumlicher oder logischer Nähe eines anderen Objekts innerhalb desselben Containers befindet, indem sie IAccessible::accNavigate aufrufen und eine der Navigationskonstanten angeben.

Bei räumlicher Navigation navigieren Clients basierend auf ihrer Position auf dem Bildschirm zu einem Objekt. Clients navigieren nach oben, unten, links oder rechts vom aktuellen Objekt, um Informationen zu einem anderen Objekt innerhalb desselben Containers abzurufen.

Bei logischer Navigation navigieren Clients zu dem Objekt, das logisch vor oder nach einem anderen Objekt liegt, wie vom Server festgelegt. Clients navigieren auf zwei Arten zu allen untergeordneten Elementen eines Objekts:

Unabhängig von der Richtung wird bei der Navigation jedes sichtbare untergeordnete Element aufgerufen, das zum übergeordneten Objekt gehört. Unsichtbare untergeordnete Elemente können bei logischer Navigation übersprungen werden. Darüber hinaus wird jedes untergeordnete Element nur einmal aufgerufen, und die Navigation erfolgt nicht in einer Schleife. Das heißt, die Methode schlägt fehl, wenn ein Client versucht, zu einem Element vor dem ersten Objekt oder nach dem letzten Objekt zu navigieren.

Räumliche und logische Navigation hängen zusammen. Beispielsweise sollte das Aufrufen der Methode mit NAVDIR_RIGHT auf einer horizontalen Symbolleiste die gleichen Ergebnisse wie das Aufrufen der Methode mit NAVDIR_NEXT erzeugen.

Das Startobjekt der Navigation ist entweder das Objekt selbst oder eines der untergeordneten Elemente des Objekts, außer wenn entweder NAVDIR_FIRSTCHILD oder NAVDIR_LASTCHILD angegeben ist. In diesem Fall muss die Navigation beim Objekt selbst beginnen.

Wenn ein Client von einem zugreifbaren Objekt zu einem gleichgeordneten Benutzeroberflächenelement navigiert oder wen CHILDID_SELF der lVal-Member von varStart ist und das angegebene Flag in navDir ein beliebiges Navigationsflag außer NAVDIR_FIRSTCHILD oder NAVDIR_LASTCHILD ist, ist das Ergebnis in pvarEnd entweder eine untergeordnete ID oder eine IDispatch-Schnittstelle. Wenn pvarEnd eine untergeordnete ID enthält, müssen Clients zuerst einen Zeiger auf die IAccessible-Schnittstelle des übergeordneten Elements abrufen, um von diesem Benutzeroberflächenelement zu navigieren oder weitere Informationen dazu zu erhalten. Um das übergeordnete Objekt abzurufen, rufen Clients die Eigenschaft IAccessible::get_accParent des gleichgeordneten Objekts oder des Startobjekts der Navigation auf.

Beachten Sie, dass Clients Informationen zu allen unverankerten Objekten enthalten müssen, indem sie die Funktion EnumChildWindows aufrufen. Da ein unverankertes Objekt nicht auf das übergeordnete Objekt zugeschnitten ist, verfügen Clients nicht über Informationen zur hierarchischen Beziehung zwischen zwei Objekten, die sich auf dem Bildschirm nahe beieinander befinden.

Die folgende Grafik ist ein Beispiel für ein unverankertes Objekt, das nicht auf das übergeordnete Objekt zugeschnitten ist.

Screenshot: Geöffnetes Fenster, das sich unverankert über einem größeren Microsoft Developer Studio-Fenster befindet

Einrichten der Reihenfolge in der logischen Navigation

In der logischen Navigation richten die Entwickler, die die Objekte entwerfen, die Beziehungen zwischen ihnen ein. Logische Navigation ist subjektiver als räumliche Navigation. Außerdem entspricht die Reihenfolge in der logischen Navigation nicht der Reihenfolge, die bei untergeordneten IDs verwendet wird.

Für Objekte mit Bildschirmpositionen sollten Serverentwickler die Navigationsreihenfolge so festlegen, wie sie die meisten Benutzer als logisch empfinden. In englischsprachigen Ländern/Regionen bedeutet dies beispielsweise eine Reihenfolge von links nach rechts und von oben nach unten.

Die Reihenfolge der logischen Navigation muss der Reihenfolge der Tastaturnavigation entsprechen. Beispielsweise enthält ein Dialogfeld die Schaltflächen OK und Abbrechen und einige Bearbeitungssteuerelemente. Ein Client, der IAccessible::accNavigate aufruft, um zum nächsten oder vorherigen Objekt in diesem Dialogfeld zu navigieren, wird in der gleichen Reihenfolge verschoben, wie wenn ein Benutzer TAB oder UMSCHALT+TAB drückt, um den Fokus zwischen Elementen zu verschieben.

Für Objekte, die keine definierten Bildschirmpositionen haben, wird die logische Reihenfolge von Serverentwicklern festgelegt, und Cliententwickler sollten keine Annahmen darüber treffen. Es ist beispielsweise zulässig, dass nicht sichtbare Objekte, z. B. Objekte, die nur vorübergehend ausgeblendet sind, mit sichtbaren Objekten kombiniert werden.