Fonction AccessibleChildren (oleacc.h)

Récupère l’ID enfant ou IDispatch de chaque enfant dans un objet conteneur accessible.

Syntaxe

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

Paramètres

[in] paccContainer

Type : IAccessible*

Pointeur vers l’interface IAccessible de l’objet conteneur.

[in] iChildStart

Type : LONG

Spécifie l’index de base zéro du premier enfant récupéré. Ce paramètre est un index, et non un ID enfant, et il est généralement défini sur zéro (0).

[in] cChildren

Type : LONG

Spécifie le nombre d’enfants à récupérer. Pour récupérer le nombre actuel d’enfants, une application appelle IAccessible ::get_accChildCount.

[out] rgvarChildren

Type : VARIANT*

Pointeur vers un tableau de structures VARIANT qui reçoit des informations sur les enfants du conteneur. Si le membre vt d’un élément de tableau est VT_I4, le membre lVal de cet élément est l’ID enfant. Si le membre vt d’un élément de tableau est VT_DISPATCH, le membre pdispVal de cet élément est l’adresse de l’interface IDispatch de l’objet enfant.

[out] pcObtained

Type : LONG*

Adresse d’une variable qui reçoit le nombre d’éléments dans le tableau rgvarChildren rempli par la fonction AccessibleChildren . Cette valeur est identique à celle du paramètre cChildren ; toutefois, si vous demandez plus d’enfants qu’il n’existe, cette valeur sera inférieure à celle de cChildren.

Valeur retournée

Type : STDAPI

En cas de réussite, retourne S_OK.

En cas de non-réussite, retourne l’un des codes d’erreur COM suivants ou un autre code d’erreur COM standard.

Code de retour Description
E_INVALIDARG
Un argument n’est pas valide.
S_FALSE
La fonction a réussi, mais il y a moins d’éléments dans le tableau rgvarChildren que d’enfants demandés dans cChildren.

Remarques

Pour récupérer des informations sur tous les enfants d’un conteneur, le paramètre iChildStart doit être égal à zéro (0), et cChildren doit être la valeur retournée par IAccessible ::get_accChildCount.

Lors de l’appel de cette fonction pour obtenir des informations sur les enfants d’un élément d’interface utilisateur, il est recommandé aux clients d’obtenir des informations sur tous les enfants. Par exemple, iChildStart doit être égal à zéro (0), et cChildren doit être la valeur retournée par IAccessible ::get_accChildCount.

Si un ID enfant est retourné pour un élément, le conteneur doit fournir des informations sur l’élément enfant. Pour obtenir des informations sur l’élément, les clients utilisent le pointeur d’interface IAccessible du conteneur et spécifient l’ID enfant obtenu dans les appels aux propriétés IAccessible .

Les clients doivent appeler la méthode IUnknown ::Release pour toutes les interfaces IDispatch récupérées par cette fonction et libérer le tableau lorsqu’il n’est plus nécessaire.

Exemples

L’exemple de fonction suivant affiche une vue de l’arborescence d’éléments sous l’élément transmis. Le nom et le rôle de chaque élément sont imprimés par des fonctions définies par l’utilisateur qui ne sont pas affichées ici.


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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête oleacc.h
Bibliothèque Oleacc.lib
DLL Oleacc.dll
Composant redistribuable Active Accessibility 1.3 RDK sur Windows NT 4.0 avec SP6 et versions ultérieures et Windows 95

Voir aussi

Iaccessible

IDispatch

VARIANTE