Функция AccessibleChildren (oleacc.h)

Извлекает идентификатор дочернего элемента или 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).

[in] cChildren

Тип: LONG

Указывает количество извлекаемых дочерних элементов. Чтобы получить текущее число дочерних элементов, приложение вызывает IAccessible::get_accChildCount.

[out] rgvarChildren

Тип: VARIANT*

Указатель на массив структур VARIANT , который получает сведения о дочерних элементах контейнера. Если элемент vt элемента массива является VT_I4, то элемент lVal для этого элемента является дочерним идентификатором. Если элемент vt элемента массива является VT_DISPATCH, то элемент pdispVal для этого элемента является адресом интерфейса IDispatch дочернего объекта.

[out] pcObtained

Тип: LONG*

Адрес переменной, которая получает количество элементов в массиве rgvarChildren , заполненном функцией AccessibleChildren . Это значение совпадает с значением параметра cChildren ; Однако если запрашивается больше дочерних элементов, чем существует, это значение будет меньше, чем у cChildren.

Возвращаемое значение

Тип: STDAPI

Возвращает значение S_OK, если операция завершилась успешно.

В случае успеха возвращает один из следующих или другой стандартный код ошибки COM.

Код возврата Описание
E_INVALIDARG
Аргумент является недопустимым.
S_FALSE
Функция выполнена успешно, но в массиве rgvarChildren меньше элементов, чем дочерних элементов, запрошенных в cChildren.

Комментарии

Чтобы получить сведения обо всех дочерних элементах в контейнере, параметр iChildStart должен быть равен нулю (0), а cChildren — значением, возвращаемым методом IAccessible::get_accChildCount.

При вызове этой функции для получения сведений о дочерних элементах пользовательского интерфейса клиентам рекомендуется получать сведения обо всех дочерних элементах. Например, значение iChildStart должно быть равно нулю (0), а cChildren — значением, возвращаемым методом IAccessible::get_accChildCount.

Если для элемента возвращается идентификатор дочернего элемента, контейнер должен предоставить сведения о дочернем элементе. Чтобы получить сведения об элементе, клиенты используют указатель интерфейса IAccessible контейнера и указывают полученный дочерний идентификатор в вызовах свойств IAccess .

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

Примеры

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


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
Header oleacc.h
Библиотека Oleacc.lib
DLL Oleacc.dll
Распространяемые компоненты Активные специальные возможности 1.3 RDK в Windows NT 4.0 с пакетом обновления 6 (SP6) и более поздних версий и Windows 95

См. также раздел

IAccessible

IDispatch

ВАРИАНТ