Delen via


Ruimtelijke en logische navigatie

Clients halen informatie op over een object dat zich ruimtelijk of logisch in de buurt van een ander object in dezelfde container bevindt door IAccessible::accNavigate aan te roepen en een van de navigatieconstanten op te geven.

Met ruimtelijke navigatie clients naar een object navigeren op basis van de locatie op het scherm. Clients navigeren omhoog, omlaag, links of rechts van het huidige object om informatie over een ander object in dezelfde container te verkrijgen.

Met logische navigatie clients naar het object gaan dat logisch voorafgaat aan of volgt een ander object, zoals bepaald door de server. Clients navigeren op twee manieren naar alle onderliggende objecten van een object:

Ongeacht de richting bezoekt de navigatie elk zichtbaar onderliggend element dat deel uitmaakt van het bovenliggende object. Onzichtbare kinderen kunnen worden overgeslagen met logische navigatie. Bovendien wordt elk kind slechts één keer bezocht en wordt de navigatie niet rondlopen. Dat wil gezegd, de methode mislukt als een client probeert te navigeren voor het eerste object of na het laatste object.

Ruimtelijke en logische navigatie zijn gerelateerd. In een horizontale werkbalk moet het aanroepen van de methode met NAVDIR_RIGHT bijvoorbeeld dezelfde resultaten opleveren als het aanroepen van de methode met NAVDIR_NEXT.

Het beginobject van de navigatie is het objectzelf of een van de onderliggende elementen van het object, behalve wanneerNAVDIR_FIRSTCHILD of NAVDIR_LASTCHILD is opgegeven; In dit geval moet de navigatie beginnen met het object zelf.

Als een client navigeert van een toegankelijk object naar een element van de gebruikersinterface op hetzelfde niveau, of als de lVal lid van varStart is CHILDID_SELF en de opgegeven vlag in navDir- een navigatievlag is behalve NAVDIR_FIRSTCHILD of NAVDIR_LASTCHILD, het resultaat in pvarEnd- is een onderliggende id of een IDispatch interface. Als pvarEnd- een onderliggende id bevat, moeten clients eerst een aanwijzer verkrijgen naar de interface van de bovenliggende om te navigeren vanuit dit element van de gebruikersinterface of om meer informatie te verkrijgen. Clients roepen de eigenschap IAccessible::get_accParent van het onderliggende object of het beginobject van de navigatie aan om het bovenliggende object te verkrijgen.

Houd er rekening mee dat clients informatie moeten hebben over alle zwevende objecten door de functie EnumChildWindows aan te roepen. Omdat een zwevend object niet is geknipt naar het bovenliggende object, hebben clients geen informatie over de hiërarchische relatie tussen twee objecten in de buurt van elkaar op het scherm.

De volgende afbeelding is een voorbeeld van een zwevend object dat niet is geknipt naar het bovenliggende object.

schermafbeelding van het geopende venster dat boven een groter microsoft Developer Studio-venster zweeft

De volgorde in logische navigatie tot stand brengen

In logische navigatie stellen de ontwikkelaars die de objecten ontwerpen de relaties tussen deze objecten vast. Logische navigatie is subjectiefer dan ruimtelijke navigatie. De volgorde in logische navigatie is ook niet hetzelfde als de volgorde die wordt gebruikt met onderliggende id's.

Voor objecten met schermlocaties moeten serverontwikkelaars de navigatievolgorde instellen op de manier waarop de meeste gebruikers logisch zouden overwegen. In Engelstalige landen/regio's betekent dit bijvoorbeeld een volgorde van links naar rechts, van boven naar beneden.

Logische navigatievolgorde moet parallelle toetsenbordnavigatievolgorde hebben. Een dialoogvenster bevat bijvoorbeeld OK- en Knoppen annuleren en enkele besturingselementen voor bewerken. Een client die IAccessible::accNavigate aanroept om naar het volgende of vorige object in dat dialoogvenster te navigeren, wordt in dezelfde volgorde verplaatst als een gebruiker die op Tab of Shift+Tab drukt om de focus tussen items te verplaatsen.

Voor objecten die geen schermlocaties hebben gedefinieerd, wordt de logische volgorde bepaald door serverontwikkelaars en moeten clientontwikkelaars er geen veronderstellingen over maken. Het is bijvoorbeeld acceptabel voor niet-zichtbare objecten, zoals objecten die alleen tijdelijk zijn verborgen, om te worden doorgekruist met zichtbare objecten.