다음을 통해 공유


공간 및 논리 탐색

클라이언트는 IAccessible::accNavigate를 호출하고 탐색 상수 중 하나를 지정하여 동일한 컨테이너 내의 다른 개체에 공간적 또는 논리적으로 가까운 개체에 대한 정보를 검색합니다.

공간 탐색을 사용하여 클라이언트는 화면의 위치에 따라 개체로 이동합니다. 클라이언트는 현재 개체에서 위, 아래쪽, 왼쪽 또는 오른쪽으로 이동하여 동일한 컨테이너 내의 다른 개체에 대한 정보를 가져옵니다.

논리 탐색 클라이언트는 서버에 의해 결정된 대로 논리적으로 다른 개체 앞에 있거나 다른 개체를 따르는 개체로 이동합니다. 클라이언트는 다음 두 가지 방법으로 개체의 모든 자식으로 이동합니다.

방향에 관계없이 탐색은 부모 개체에 속하는 표시되는 각 자식에 방문합니다. 보이지 않는 자식은 논리적 탐색으로 건너뛸 수 있습니다. 또한 각 자식은 한 번만 방문하며 탐색은 반복되지 않습니다. 즉, 클라이언트가 첫 번째 개체 앞이나 마지막 개체 뒤를 탐색하려고 하면 메서드가 실패합니다.

공간 및 논리적 탐색은 관련되어 있습니다. 예를 들어 가로 도구 모음에서 NAVDIR_RIGHT 사용하여 메서드를 호출하면 NAVDIR_NEXT 메서드를 호출하는 것과 동일한 결과가 생성됩니다.

탐색의 시작 개체는NAVDIR_FIRSTCHILD 또는 NAVDIR_LASTCHILD 지정된 경우 를 제외하고 자체 개체 또는 개체의 자식 중 하나입니다. 이 경우 탐색은 개체 자체에서 시작해야 합니다.

클라이언트가 액세스 가능한 개체에서 형제 사용자 인터페이스 요소로 이동하거나 varStart의 lVal 멤버가 CHILDID_SELF navDir지정된 플래그가 NAVDIR_FIRSTCHILD 또는 NAVDIR_LASTCHILD 제외한 모든 탐색 플래그인 경우 pvarEnd의 결과는 자식 ID 또는 IDispatch 인터페이스입니다. pvarEnd에 자식 ID가 포함된 경우 클라이언트는 이 사용자 인터페이스 요소에서 탐색하거나 이에 대한 자세한 정보를 얻기 위해 먼저 부모의 IAccessible 인터페이스에 대한 포인터를 가져와야 합니다. 부모 개체를 가져오기 위해 클라이언트는 형제 개체 또는 탐색의 시작 개체의 IAccessible::get_accParent 속성을 호출합니다.

클라이언트에는 EnumChildWindows 함수를 호출하여 모든 부동 개체에 대한 정보가 있어야 합니다. 부동 개체가 부모 개체에 잘리지 않으므로 클라이언트는 화면에서 서로 가까운 두 개체 간의 계층 관계에 대한 정보를 가지고 있지 않습니다.

다음 그래픽은 부모 개체에 잘리지 않은 부동 개체의 예입니다.

더 큰 Microsoft 개발자 스튜디오 창 위에 떠 있는 열린 창의 스크린샷

논리 탐색에서 순서 설정

논리적 탐색에서 개체를 디자인하는 개발자는 개체 간의 관계를 설정합니다. 논리적 탐색은 공간 탐색보다 주관적입니다. 또한 논리적 탐색의 순서는 자식 ID와 함께 사용되는 순서와 동일하지 않습니다.

화면 위치가 있는 개체의 경우 서버 개발자는 대부분의 사용자가 논리적으로 고려하는 방식으로 탐색 순서를 설정해야 합니다. 예를 들어 영어권 국가/지역에서는 왼쪽에서 오른쪽으로, 위에서 아래로 정렬됩니다.

논리적 탐색 순서는 키보드 탐색 순서와 평행해야 합니다. 예를 들어 대화 상자에는 확인취소 푸시 단추와 몇 가지 편집 컨트롤이 포함되어 있습니다. IAccessible::accNavigate를 호출하여 해당 대화 상자의 다음 또는 이전 개체로 이동하는 클라이언트는 Tab 또는 Shift+TAB을 눌러 항목 간에 포커스를 이동하는 것과 동일한 순서로 이동합니다.

정의된 화면 위치가 없는 개체의 경우 논리적 순서는 서버 개발자가 결정하며 클라이언트 개발자는 이에 대해 가정하지 않아야 합니다. 예를 들어 일시적으로만 숨겨진 개체와 같이 보이지 않는 개체가 표시되는 개체와 섞이는 것이 허용됩니다.