Navigation spatiale et logique

Les clients récupèrent des informations sur un objet qui est spatialement ou logiquement proche d’un autre objet dans le même conteneur en appelant IAccessible::accNavigate et en spécifiant l’une des constantes de navigation.

Avec la navigation spatiale, les clients naviguent vers un objet en fonction de sa position sur l’écran. Les clients naviguent vers le haut, le bas, la gauche ou la droite à partir de l’objet actuel pour obtenir des informations sur un autre objet dans le même conteneur.

Avec la navigation logique, les clients naviguent vers l’objet qui précède ou suit logiquement un autre objet, tel que déterminé par le serveur. Les clients naviguent vers tous les enfants d’un objet de deux manières :

Quel que soit le sens, la navigation visite chaque enfant visible appartenant à l’objet parent. Les enfants invisibles peuvent être ignorés avec la navigation logique. De plus, chaque enfant n’est visité qu’une seule fois, et la navigation ne boucle pas. Autrement dit, la méthode échoue si un client tente de naviguer avant le premier objet ou après le dernier objet.

La navigation spatiale et logique sont liées. Par exemple, dans une barre d’outils horizontale, appeler la méthode avec NAVDIR_RIGHT devrait produire les mêmes résultats que d’appeler la méthode avec NAVDIR_NEXT.

L’objet de départ de la navigation est soit l’objet lui-même soit l’un des enfants de l’objet, sauf lorsque NAVDIR_FIRSTCHILD ou NAVDIR_LASTCHILD est spécifié ; dans ce cas, la navigation doit commencer à partir de l’objet lui-même.

Si un client navigue d’un objet accessible à un élément de l’interface utilisateur frère, ou si le membre lVal de varStart est CHILDID_SELF et que l’indicateur spécifié dans navDir est un indicateur de navigation autre que NAVDIR_FIRSTCHILD ou NAVDIR_LASTCHILD, le résultat dans pvarEnd est soit un identifiant d’enfant, soit une interface IDispatch. Si pvarEnd contient un identifiant d’enfant, les clients doivent d’abord obtenir un pointeur vers l’interface IAccessible du parent pour naviguer depuis cet élément d’interface utilisateur ou pour obtenir plus d’informations à son sujet. Pour obtenir l’objet parent, les clients appellent la propriété IAccessible::get_accParent de l’objet frère ou de l’objet de départ de la navigation.

Notez que les clients doivent avoir des informations sur tous les objets flottants en appelant la fonction EnumChildWindows. Comme un objet flottant n’est pas coupé à son parent, les clients n’ont pas d’informations sur la relation hiérarchique entre deux objets proches l’un de l’autre sur l’écran.

Le graphique suivant est un exemple d’un objet flottant qui n’est pas coupé à son parent.

Capture d’écran de la fenêtre ouverte flottant au-dessus d’une fenêtre plus grande de Microsoft Developer Studio

Établir l’ordre dans la navigation logique

Dans la navigation logique, les développeurs qui conçoivent les objets établissent les relations entre eux. La navigation logique est plus subjective que la navigation spatiale. De plus, l’ordre dans la navigation logique n’est pas le même que l’ordre utilisé avec les identifiants d’enfant.

Pour les objets qui ont des emplacements à l’écran, il est recommandé pour les développeurs de serveurs d’établir l’ordre de navigation de la manière que la plupart des utilisateurs considéreraient logique. Dans les pays/régions anglophones, par exemple, cela signifie un ordre de gauche à droite, de haut en bas.

L’ordre de navigation logique doit paralléliser l’ordre de navigation par clavier. Par exemple, une boîte de dialogue contient des boutons poussoirs OK et Cancel et quelques contrôles d’édition. Un client qui appelle IAccessible::accNavigate pour naviguer vers l’objet suivant ou précédent dans cette boîte de dialogue se déplace dans le même ordre qu’un utilisateur appuyant sur TAB ou SHIFT+TAB pour déplacer le focus entre les éléments.

Pour les objets qui n’ont pas d’emplacements définis à l’écran, l’ordre logique est décidé par les développeurs de serveurs, et les développeurs de clients ne devraient faire aucune supposition à ce sujet. Par exemple, il est acceptable que des objets non visibles, tels que des objets temporairement masqués, soient mélangés avec des objets visibles.