Пространственная и логическая навигация

Клиенты получают сведения об объекте, который находится пространственно или логически рядом с другим объектом в том же контейнере, вызывая метод IAccess::accNavigate и указывая одну из констант навигации.

С помощью пространственной навигации клиенты переходит к объекту в зависимости от его расположения на экране. Клиенты перемещаются вверх, вниз, влево или вправо от текущего объекта, чтобы получить сведения о другом объекте в том же контейнере.

С помощью логической навигации клиенты переходют к объекту, который логически предшествует другому объекту или следует за ним, как определено сервером. Клиенты переходить ко всем дочерним элементам объекта двумя способами:

Независимо от направления навигация посещает каждый видимый дочерний элемент, принадлежащий родительскому объекту. Невидимые дочерние элементы могут быть пропущены при логической навигации. Кроме того, каждый дочерний элемент посещается только один раз, и навигация не циклически. Это значит, что метод завершается ошибкой, если клиент пытается перейти до первого или после последнего объекта.

Пространственная и логическая навигация связаны. Например, на горизонтальной панели инструментов вызов метода с помощью NAVDIR_RIGHT должен давать те же результаты, что и вызов метода с NAVDIR_NEXT.

Начальным объектом навигации является либо сам объект, либо один из дочерних элементов объекта, за исключением случаев, когдазаданы NAVDIR_FIRSTCHILD или NAVDIR_LASTCHILD ; в этом случае навигация должна начинаться с самого объекта .

Если клиент переходит от доступного объекта к элементу одноуровневого пользовательского интерфейса или если элемент lValvarStart является CHILDID_SELF , а указанный флаг в navDir является любым флагом навигации, кроме NAVDIR_FIRSTCHILD или NAVDIR_LASTCHILD, результатом в pvarEnd является либо дочерний идентификатор, либо интерфейс IDispatch . Если pvarEnd содержит дочерний идентификатор, клиенты должны сначала получить указатель на интерфейс IAccess родительского элемента, чтобы перейти из этого элемента пользовательского интерфейса или получить дополнительные сведения о нем. Чтобы получить родительский объект, клиенты вызывают свойство IAccess::get_accParent одноуровневого объекта или начального объекта навигации.

Обратите внимание, что клиенты должны иметь сведения обо всех плавающих объектах путем вызова функции EnumChildWindows . Поскольку плавающий объект не обрезается к родительскому объекту, клиенты не имеют сведений об иерархической связи между двумя объектами, расположенными рядом друг с другом на экране.

На следующем рисунке показан пример плавающего объекта, который не обрезается к родительскому объекту.

Снимок экрана: открытое окно над большим окном Microsoft Developer Studio

Установка порядка в логической навигации

В логической навигации разработчики, разрабатывающие объекты, устанавливают связи между ними. Логическая навигация более субъективна, чем пространственная навигация. Кроме того, порядок в логической навигации отличается от порядка, используемого с дочерними идентификаторами.

Для объектов с расположением экрана разработчики серверов должны установить порядок навигации так, как большинство пользователей считает логическим. Например, в англоязычных странах и регионах это означает порядок слева направо, сверху вниз.

Порядок логической навигации должен быть параллельным порядком навигации с помощью клавиатуры. Например, диалоговое окно содержит кнопки "ОК" и "Отмена " и несколько элементов управления "Изменить". Клиент, вызывающий IAccessible::accNavigate для перехода к следующему или предыдущему объекту в этом диалоговом окне, перемещается в том же порядке, что и пользователь, нажимающий клавиши TAB или SHIFT+TAB для перемещения фокуса между элементами.

Для объектов, которые не имеют определенных расположений на экране, логический порядок определяется разработчиками серверов, и разработчики клиентов не должны делать никаких предположений относительно этого. Например, это допустимо для невидимых объектов, таких как объекты, которые только временно скрыты, перемежаются с видимыми объектами.