Térbeli és logikai navigáció

Az ügyfelek az IAccessible::accNavigate meghívásával és az navigációs állandók egyikénekmegadásával adatokat kérnek le egy olyan objektumról, amely térbeli vagy logikailag közel van egy másik objektumhoz ugyanabban a tárolóban.

A térbeli navigációval ügyfelek a képernyő helyétől függően navigálnak egy objektumhoz. Az ügyfelek felfelé, lefelé, balra vagy jobbra navigálnak az aktuális objektumról, hogy információkat szerezzenek be egy másik objektumról ugyanazon a tárolón belül.

A logikai navigációval ügyfelek a kiszolgáló által meghatározott, egy másik objektumot logikailag megelőző vagy követő objektumra navigálnak. Az ügyfelek kétféleképpen navigálnak egy objektum összes gyermekéhez:

Az iránytól függetlenül a navigáció a szülőobjektumhoz tartozó összes látható gyermekre ellátogat. A láthatatlan gyermekek logikai navigációval kihagyhatók. Emellett minden gyermek csak egyszer látogatható meg, és a navigáció nem ciklikus. Ez azt jelzi, hogy a metódus meghiúsul, ha egy ügyfél az első objektum vagy az utolsó objektum előtt próbál navigálni.

A térbeli és logikai navigáció összefügg. Egy vízszintes eszköztáron például a metódus NAVDIR_RIGHT meghívásának ugyanazokat az eredményeket kell eredményeznie, mint a metódus meghívása NAVDIR_NEXT.

A navigáció kezdő objektuma vagy az az objektum,saját vagy az objektum egyik gyermeke, kivéve, haNAVDIR_FIRSTCHILD vagy NAVDIR_LASTCHILD van megadva; ebben az esetben a navigációnak magától az objektumtól kell kezdődnie.

Ha egy ügyfél egy akadálymentes objektumból egy testvér felhasználói felületi elemhez navigál, vagy ha a varStartlVal tagja CHILDID_SELF, és a navDir megadott jelölője bármilyen navigációs jelző, kivéve NAVDIR_FIRSTCHILD vagy NAVDIR_LASTCHILD, a pvarEnd eredménye gyermekazonosító vagy IDispatch interfész. Ha pvarEnd gyermekazonosítót tartalmaz, az ügyfeleknek először a szülő IAccessible felületére mutató mutatót kell beszerezniük ahhoz, hogy navigáljanak erről a felhasználói felületi elemről, vagy további információt szerezzenek róla. A szülőobjektum beszerzéséhez az ügyfelek meghívják a IAccessible::get_accParent testvérobjektum vagy a navigáció kezdő objektumának tulajdonságát.

Vegye figyelembe, hogy az ügyfeleknek az EnumChildWindows függvény meghívásával minden lebegő objektumról rendelkezniük kell információval. Mivel egy lebegő objektum nincs kivágva a szülőhöz, az ügyfelek nem rendelkeznek információval a képernyőn egymáshoz közeli két objektum közötti hierarchikus kapcsolatról.

Az alábbi ábra egy olyan lebegő objektumra mutat példát, amelyet nem vág ki a szülője.

képernyőfelvétel egy nagyobb Microsoft Developer Studio-ablak fölött lebegő nyitott ablakról

A sorrend létrehozása a logikai navigációban

A logikai navigációban az objektumokat tervező fejlesztők hozzák létre a köztük lévő kapcsolatokat. A logikai navigáció szubjektívebb, mint a térbeli navigáció. Emellett a logikai navigáció sorrendje nem ugyanaz, mint a gyermekazonosítókhoz használt sorrend.

A képernyőhelyekkel rendelkező objektumok esetében a kiszolgálófejlesztőknek úgy kell meghatározniuk a navigációs sorrendet, ahogyan a felhasználók többsége logikusnak tartja. Az angol nyelvű országokban/régiókban például ez balról jobbra, felülről lefelé rendezést jelent.

A logikai navigációs sorrendnek párhuzamos billentyűzet-navigációs sorrendnek kell lennie. Egy párbeszédpanel például OK és Mégse leküldéses gombokat és néhány szerkesztési vezérlőt tartalmaz. Egy ügyfél, amely meghívja IAccessible::accNavigate, hogy a párbeszédpanel következő vagy előző objektumára navigáljon, ugyanabban a sorrendben mozog, mint a tabulátor vagy a SHIFT+TAB billentyűkombinációt lenyomó felhasználó, hogy áthelyezze a fókuszt az elemek között.

Az olyan objektumok esetében, amelyek nem rendelkeznek meghatározott képernyőhelyekkel, a logikai sorrendet a kiszolgálófejlesztők határozzák meg, és az ügyfélfejlesztőknek nem szabad feltételezéseket tenniük róla. Elfogadható például, ha a nem látható objektumok, például a csak ideiglenesen rejtett objektumok látható objektumokkal vannak összekötve.