다음을 통해 공유


AccessibleChildren 함수(oleacc.h)

액세스 가능한 컨테이너 개체 내에서 각 자식의 자식 ID 또는 IDispatch 를 검색합니다.

구문

HRESULT AccessibleChildren(
  [in]  IAccessible *paccContainer,
  [in]  LONG        iChildStart,
  [in]  LONG        cChildren,
  [out] VARIANT     *rgvarChildren,
  [out] LONG        *pcObtained
);

매개 변수

[in] paccContainer

형식: IAccessible*

컨테이너 개체의 IAccessible 인터페이스에 대한 포인터입니다.

[in] iChildStart

형식: LONG

검색되는 첫 번째 자식의 인덱스(0부터 시작)를 지정합니다. 이 매개 변수는 자식 ID가 아닌 인덱스이며 일반적으로 0으로 설정됩니다.

[in] cChildren

형식: LONG

검색할 자식 수를 지정합니다. 현재 자식 수를 검색하기 위해 애플리케이션은 IAccessible::get_accChildCount 호출합니다.

[out] rgvarChildren

형식: VARIANT*

컨테이너의 자식에 대한 정보를 수신하는 VARIANT 구조체의 배열에 대한 포인터입니다. 배열 요소의 vt 멤버가 VT_I4 경우 해당 요소의 lVal 멤버는 자식 ID입니다. 배열 요소의 vt 멤버가 VT_DISPATCH 경우 해당 요소의 pdispVal 멤버는 자식 개체의 IDispatch 인터페이스 주소입니다.

[out] pcObtained

형식: LONG*

AccessibleChildren 함수로 채워진 rgvarChildren 배열의 요소 수를 수신하는 변수의 주소입니다. 이 값은 cChildren 매개 변수의 값과 동일합니다. 그러나 존재보다 더 많은 자식을 요청하는 경우 이 값은 cChildren보다 작습니다.

반환 값

형식: STDAPI

성공하면 S_OK를 반환합니다.

성공하지 못하면 다음 또는 다른 표준 COM 오류 코드 중 하나를 반환합니다.

반환 코드 설명
E_INVALIDARG
인수가 잘못된 경우.
S_FALSE
함수가 성공했지만 rgvarChildren 배열에는 cChildren에서 요청된 자식보다 적은 요소가 있습니다.

설명

컨테이너의 모든 자식에 대한 정보를 검색하려면 iChildStart 매개 변수는 0이어야 하며 cChildren는IAccessible::get_accChildCount 반환된 값이어야 합니다.

이 함수를 호출하여 사용자 인터페이스 요소의 자식에 대한 정보를 가져올 때 클라이언트는 모든 자식에 대한 정보를 가져오는 것이 좋습니다. 예를 들어 iChildStart 는 0이어야 하며 cChildren는IAccessible::get_accChildCount 반환된 값이어야 합니다.

요소에 대해 자식 ID가 반환되는 경우 컨테이너는 자식 요소에 대한 정보를 제공해야 합니다. 요소에 대한 정보를 얻기 위해 클라이언트는 컨테이너의 IAccessible 인터페이스 포인터를 사용하고 IAccessible 속성에 대한 호출에서 가져온 자식 ID를 지정합니다.

클라이언트는 이 함수에서 검색한 모든 IDispatch 인터페이스에 대해 IUnknown::Release 메서드를 호출하고 더 이상 필요하지 않은 경우 배열을 해제해야 합니다.

예제

다음 예제 함수는 전달되는 요소 아래에 요소 트리의 뷰를 표시합니다. 각 요소의 이름과 역할은 여기에 표시되지 않는 사용자 정의 함수에 의해 인쇄됩니다.


HRESULT WalkTreeWithAccessibleChildren(IAccessible* pAcc, int depth)
{
    HRESULT hr;
    long childCount;
    long returnCount;

    if (!pAcc)
    {
        return E_INVALIDARG;
    }
    hr = pAcc->get_accChildCount(&childCount);
    if (FAILED(hr))
    {
        return hr;
    };
    if (childCount == 0)
    {
        return S_FALSE;
    }
    VARIANT* pArray = new VARIANT[childCount];
    hr = AccessibleChildren(pAcc, 0L, childCount, pArray, &returnCount);
    if (FAILED(hr))
    {
        return hr;
    };

    // Iterate through children.
    for (int x = 0; x < returnCount; x++)
    {
        VARIANT vtChild = pArray[x];
        // If it's an accessible object, get the IAccessible, and recurse.
        if (vtChild.vt == VT_DISPATCH)
        {
            IDispatch* pDisp = vtChild.pdispVal;
            IAccessible* pChild = NULL;
            hr = pDisp->QueryInterface(IID_IAccessible, (void**) &pChild);
            if (hr == S_OK)
            {
                for (int y = 0; y < depth; y++)
                {
                    printf("  ");
                }
                PrintName(pChild, CHILDID_SELF);
                printf("(Object) ");
                PrintRole(pChild, CHILDID_SELF);
                WalkTreeWithAccessibleChildren(pChild, depth + 1);
                pChild->Release();
            }
            pDisp->Release();
        }
        // Else it's a child element so we have to call accNavigate on the parent,
        //   and we do not recurse because child elements can't have children.
        else
        {
            for (int y = 0; y < depth; y++)
            {
                printf("  ");
            }
            PrintName(pAcc, vtChild.lVal);
            printf("(Child element) ");
            PrintRole(pAcc, vtChild.lVal);
        }
    }
    delete[] pArray;
    return S_OK;
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 oleacc.h
라이브러리 Oleacc.lib
DLL Oleacc.dll
재배포 가능 파일 SP6 이상 및 Windows 95를 Windows NT 4.0의 활성 접근성 1.3 RDK

추가 정보

IAccessible

IDispatch

변형