Freigeben über


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 Navigationskonstanten angeben.

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

Mit logischen Navigationsclients navigieren Sie zu dem Objekt, das einem anderen Objekt logisch vorangeht oder einem anderen Objekt folgt, wie vom Server bestimmt. Clients navigieren auf zwei Arten zu allen untergeordneten Objekten eines Objekts:

Unabhängig von der Richtung besucht die Navigation jedes sichtbare untergeordnete Element, das zum übergeordneten Objekt gehört. Unsichtbare untergeordnete Elemente können mit logischer Navigation übersprungen werden. Darüber hinaus wird jedes Kind nur einmal besucht, und die Navigation wird nicht umrundet. 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 hängen zusammen. Beispielsweise sollte das Aufrufen der Methode mit NAVDIR_RIGHT in einer horizontalen Symbolleiste die gleichen Ergebnisse wie das Aufrufen der Methode mit NAVDIR_NEXT.

Das Startobjekt der Navigation ist entweder das Objekt, das esselbst oder eines der untergeordneten Elemente des Objekts ist, es sei denn, es wird entweder NAVDIR_FIRSTCHILD oder NAVDIR_LASTCHILD angegeben; In diesem Fall muss die Navigation mit dem Objekt selbst beginnen.

Wenn ein Client von einem zugänglichen Objekt zu einem gleichgeordneten Benutzeroberflächenelement navigiert oder das lVal-Element von varStartCHILDID_SELF ist und das angegebene Flag in navDir ein beliebiges Navigationsflag mit Ausnahme von 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 übergeordnete IAccessible-Schnittstelle abrufen, um von diesem Benutzeroberflächenelement zu navigieren oder weitere Informationen dazu zu erhalten. Um das übergeordnete Objekt abzurufen, rufen Clients die IAccessible::get_accParent-Eigenschaft des gleichgeordneten Objekts oder das Startobjekt der Navigation auf.

Beachten Sie, dass Clients Über Informationen zu allen schwebenden Objekten verfügen müssen, indem sie die EnumChildWindows-Funktion aufrufen. Da ein schwebendes Objekt nicht an sein übergeordnetes Objekt gekappt wird, verfügen Clients über keine Informationen über die hierarchische Beziehung zwischen zwei Objekten in der Nähe des Bildschirms.

Die folgende Grafik ist ein Beispiel für ein gleitendes Objekt, das nicht an das übergeordnete Objekt gekappt ist.

Screenshot des geöffneten Fensters, das über einem größeren Microsoft Developer Studio-Fenster schwebt

Einrichten der Reihenfolge in der logischen Navigation

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

Für Objekte mit Bildschirmspeicherorten sollten Serverentwickler die Navigationsreihenfolge so einrichten, wie sie die meisten Benutzer für logisch halten würden. In englischsprachigen Ländern/Regionen bedeutet dies für instance eine Von links nach rechts, von oben nach unten.

Logische Navigationsreihenfolge muss parallele Tastaturnavigationsreihenfolge sein. Ein Dialogfeld enthält z. B. 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, bewegt sich in der gleichen Reihenfolge wie ein Benutzer, der TAB oder UMSCHALT+TAB drückt, um den Fokus zwischen Elementen zu verschieben.

Für Objekte, die keine definierten Bildschirmspeicherorte haben, wird die logische Reihenfolge von Serverentwicklern festgelegt, und Cliententwickler sollten keine Annahmen darüber treffen. Für instance ist es akzeptabel, dass nicht sichtbare Objekte, z. B. Objekte, die nur vorübergehend ausgeblendet werden, mit sichtbaren Objekten durchsetzt werden.