Räumliche und logische Navigation
Clients rufen Informationen zu einem Objekt ab, das sich räumlich oder logisch in der Nähe eines anderen Objekts innerhalb desselben Containers befindet, indem sie IAccessible::accNavigate aufrufen und eine der Navigationskonst constants angeben.
Bei der räumlichen Navigation navigieren Clients zu einem Objekt basierend auf seiner Position auf dem Bildschirm. Clients navigieren vom aktuellen Objekt nach oben, unten, links oder rechts, um Informationen zu einem anderen Objekt innerhalb desselben Containers zu erhalten.
Mit logischen Navigationsclients navigieren Sie zu dem Objekt, das einem anderen Objekt logisch voransteht oder diesem folgt, wie vom Server festgelegt. Clients navigieren auf zwei Arten zu allen unteren Objekten eines Objekts:
- Starten Sie die Navigation mit NAVDIR _ FIRSTCHILD, und rufen Sie dann wiederholt die -Methode mit NAVDIR _ NEXT auf.
- Starten Sie die Navigation mit NAVDIR _ LASTCHILD, und rufen Sie die Methode wiederholt mit NAVDIR _ PREVIOUS auf.
Unabhängig von der Richtung besucht die Navigation jedes sichtbare untergeordnete Element, das zum übergeordneten Objekt gehört. Unsichtbare children können mit logischer Navigation übersprungen werden. Darüber hinaus wird jedes untergeordnete -Kind nur einmal besucht, und die Navigation wird nicht in einer Schleife umkreist. Das heißt, die Methode schlägt fehl, wenn ein Client versucht, vor dem ersten Objekt oder nach dem letzten Objekt zu navigieren.
Räumliche und logische Navigation sind verknüpft. Beispielsweise sollte der Aufruf der -Methode mit NAVDIR _ RIGHT auf einer horizontalen Symbolleiste die gleichen Ergebnisse wie das Aufrufen der -Methode mit NAVDIR _ NEXT ergeben.
Das Startobjekt der Navigation ist entweder das Objekt selbst oder eines der untergeordneten Objekte des Objekts, es sei denn, entweder NAVDIR _ FIRSTCHILD oder NAVDIR _ LASTCHILD ist angegeben. In diesem Fall muss die Navigation mit dem Objekt selbst beginnen.
Wenn ein Client von einem barrierefreien Objekt zu einem gleichgeordneten Benutzeroberflächenelement navigiert, oder wenn der lVal-Member von varStart CHILDID _ SELF ist und das angegebene Flag in navDir ein beliebiges Navigationsflag außer NAVDIR _ FIRSTCHILD oder NAVDIR _ LASTCHILDist, ist das Ergebnis in pvarEnd entweder eine untergeordnete ID oder eine IDispatch-Schnittstelle. Wenn pvarEnd eine untergeordnete ID enthält, müssen Clients zunächst einen Zeiger auf die IAccessible-Schnittstelle des übergeordneten Elements abrufen, um von diesem Benutzeroberflächenelement zu navigieren oder weitere Informationen darüber zu erhalten. Um das übergeordnete Objekt zu erhalten, rufen Clients die IAccessible::get _ accParent-Eigenschaft des gleichgeordneten Objekts oder das Startobjekt der Navigation auf.
Beachten Sie, dass Clients über Informationen zu allen unverankerten Objekten verfügen müssen, indem sie die EnumChildWindows-Funktion aufrufen. Da ein Gleitkommaobjekt nicht auf das übergeordnete Objekt abgeschnitten wird, verfügen Clients nicht über Informationen zur hierarchischen Beziehung zwischen zwei Objekten in der Nähe des Bildschirms.
Die folgende Grafik ist ein Beispiel für ein Unverankerungsobjekt, das nicht auf das übergeordnete Objekt abgeschnitten wird.

Festlegen der Reihenfolge in der logischen Navigation
In der logischen Navigation richten die Entwickler, die die Objekte entwerfen, die Beziehungen zwischen ihnen ein. Die logische Navigation ist stärker als die räumliche Navigation. Außerdem ist die Reihenfolge in der logischen Navigation nicht mit der Reihenfolge identisch, die mit untergeordneten IDs verwendet wird.
Für Objekte mit Bildschirmpositionen sollten Serverentwickler die Navigationsfolge so festlegen, wie die meisten Benutzer dies als logisch betrachten würden. In englischsprachigen Ländern/Regionen bedeutet dies z. B. eine Von-links-nach-rechts-Reihenfolge von oben nach unten.
Die reihenfolge der logischen Navigation muss parallel zur Navigationsfolge der Tastatur sein. Ein Dialogfeld enthält beispielsweise die Schaltflächen OK und Abbrechen sowie einige Bearbeitungssteuerelemente. Ein Client, der IAccessible::accNavigate aufruft, um zum nächsten oder vorherigen Objekt in diesem Dialogfeld zu navigieren, wechselt in der gleichen Reihenfolge wie ein Benutzer, der TAB oder UMSCHALT+TAB drückt, um den Fokus zwischen Elementen zu verschieben.
Für Objekte, für die keine Bildschirmpositionen definiert sind, wird die logische Reihenfolge von Serverentwicklern festgelegt, und Cliententwickler sollten keine Annahmen dazu treffen. Beispielsweise ist es akzeptabel, dass nicht sichtbare Objekte, z. B. Objekte, die nur vorübergehend ausgeblendet sind, mit sichtbaren Objekten übereinander liegen.