Функция 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.
Код возврата | Описание |
---|---|
|
Аргумент является недопустимым. |
|
Функция выполнена успешно, но в массиве 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 |