Navegación espacial y lógica

Los clientes recuperan información sobre un objeto que está espacial o lógicamente cerca de otro objeto dentro del mismo contenedor llamando a IAccessible::accNavigate y especificando una de las constantes de navegación.

Con los clientes de navegación espacial , navegue a un objeto en función de su ubicación en la pantalla. Los clientes navegan hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha desde el objeto actual para obtener información sobre otro objeto dentro del mismo contenedor.

Con los clientes de navegación lógicos , navegue hasta el objeto que precede lógicamente o sigue a otro objeto, determinado por el servidor. Los clientes navegan a todos los elementos secundarios de un objeto de dos maneras:

Independientemente de la dirección, la navegación visita cada elemento secundario visible que pertenece al objeto primario. Los elementos secundarios invisibles se pueden omitir con la navegación lógica. Además, cada elemento secundario solo se visita una vez y la navegación no recorre en bucle. Es decir, se produce un error en el método si un cliente intenta navegar antes del primer objeto o después del último objeto.

La navegación espacial y lógica están relacionadas. Por ejemplo, en una barra de herramientas horizontal, llamar al método con NAVDIR_RIGHT debe generar los mismos resultados que llamar al método con NAVDIR_NEXT.

El objeto inicial de la navegación es el objeto propioo uno de los elementos secundarios del objeto, excepto cuando se especifica NAVDIR_FIRSTCHILD o NAVDIR_LASTCHILD; en este caso, la navegación debe comenzar desde el propio objeto.

Si un cliente navega desde un objeto accesible a un elemento de interfaz de usuario relacionado, o si el miembro lVal de varStart es CHILDID_SELF y la marca especificada en navDir es cualquier marca de navegación excepto NAVDIR_FIRSTCHILD o NAVDIR_LASTCHILD, el resultado de pvarEnd es un identificador secundario o una interfaz IDispatch . Si pvarEnd contiene un identificador secundario, los clientes primero deben obtener un puntero a la interfaz IAccessible del elemento primario para navegar desde este elemento de interfaz de usuario o para obtener más información sobre él. Para obtener el objeto primario, los clientes llaman a la propiedad IAccessible::get_accParent del objeto relacionado o al objeto inicial de la navegación.

Tenga en cuenta que los clientes deben tener información sobre todos los objetos flotantes mediante una llamada a la función EnumChildWindows . Dado que un objeto flotante no se recorta a su elemento primario, los clientes no tienen información sobre la relación jerárquica entre dos objetos cerca de otro en la pantalla.

El siguiente gráfico es un ejemplo de un objeto flotante que no se recorta en su elemento primario.

captura de pantalla de la ventana abierta flotante encima de una ventana de Microsoft Developer Studio más grande

Establecer el orden en la navegación lógica

En la navegación lógica, los desarrolladores que diseñan los objetos establecen las relaciones entre ellos. La navegación lógica es más objetiva que la navegación espacial. Además, el orden en la navegación lógica no es el mismo que el orden usado con identificadores secundarios.

En el caso de los objetos que tienen ubicaciones de pantalla, los desarrolladores de servidores deben establecer el orden de navegación de la manera en que la mayoría de los usuarios considerarían lógicos. En países o regiones de habla inglesa, por ejemplo, esto significa una ordenación de izquierda a derecha, de arriba a abajo.

El orden de navegación lógico debe ser el orden de navegación por teclado paralelo. Por ejemplo, un cuadro de diálogo contiene los botones Aceptar y Cancelar inserción y algunos controles de edición. Un cliente que llama a IAccessible::accNavigate para navegar al siguiente objeto o anterior de ese cuadro de diálogo se mueve en el mismo orden que un usuario presionando TAB o MAYÚS+TAB para mover el foco entre elementos.

En el caso de los objetos que no tienen ubicaciones de pantalla definidas, el orden lógico lo deciden los desarrolladores de servidores y los desarrolladores cliente no deben realizar ninguna suposición sobre él. Por ejemplo, es aceptable que los objetos no visibles, como los objetos que solo están temporalmente ocultos, se intercale con objetos visibles.