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 |
---|---|
|
Un argument n’est pas valide. |
|
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 |