Funzione AccessibleChildren (oleacc.h)
Recupera l'ID figlio o IDispatch di ogni figlio all'interno di un oggetto contenitore accessibile.
Sintassi
HRESULT AccessibleChildren(
[in] IAccessible *paccContainer,
[in] LONG iChildStart,
[in] LONG cChildren,
[out] VARIANT *rgvarChildren,
[out] LONG *pcObtained
);
Parametri
[in] paccContainer
Tipo: IAccessibile*
Puntatore all'interfaccia IAccess dell'oggetto contenitore.
[in] iChildStart
Tipo: LONG
Specifica l'indice in base zero del primo figlio recuperato. Questo parametro è un indice, non un ID figlio ed è in genere impostato su zero (0).
[in] cChildren
Tipo: LONG
Specifica il numero di elementi figlio da recuperare. Per recuperare il numero corrente di elementi figlio, un'applicazione chiama IAccess::get_accChildCount.
[out] rgvarChildren
Tipo: VARIANT*
Puntatore a una matrice di strutture VARIANT che ricevono informazioni sui figli del contenitore. Se il membro vt di un elemento di matrice è VT_I4, il membro lVal per tale elemento è l'ID figlio. Se il membro vt di un elemento di matrice è VT_DISPATCH, il membro pdispVal per tale elemento è l'indirizzo dell'interfaccia IDispatch dell'oggetto figlio.
[out] pcObtained
Tipo: LONG*
Indirizzo di una variabile che riceve il numero di elementi nella matrice rgvarChildren popolata dalla funzione AccessibleChildren . Questo valore è uguale a quello del parametro cChildren ; tuttavia, se si richiedono più figli di quanto esista, questo valore sarà minore di quello di cChildren.
Valore restituito
Tipo: STDAPI
Se ha esito positivo, restituisce S_OK.
In caso contrario, restituisce uno dei codici di errore COM seguenti o un altro codice di errore COM standard.
Codice restituito | Descrizione |
---|---|
|
Un argomento non è valido. |
|
La funzione ha avuto esito positivo, ma ci sono meno elementi nella matrice rgvarChildren rispetto a quelli richiesti in cChildren. |
Commenti
Per recuperare informazioni su tutti gli elementi figlio in un contenitore, il parametro iChildStart deve essere zero (0) e cChildren deve essere il valore restituito da IAccess::get_accChildCount.
Quando si chiama questa funzione per ottenere informazioni sugli elementi figlio di un elemento dell'interfaccia utente, è consigliabile che i client ottengano informazioni su tutti gli elementi figlio. Ad esempio, iChildStart deve essere zero (0) e cChildren deve essere il valore restituito da IAccess::get_accChildCount.
Se viene restituito un ID figlio per un elemento, il contenitore deve fornire informazioni sull'elemento figlio. Per ottenere informazioni sull'elemento, i client usano il puntatore dell'interfaccia IAccessibile del contenitore e specificano l'ID figlio ottenuto nelle chiamate alle proprietà IAccessi .
I client devono chiamare il metodo IUnknown::Release per qualsiasi interfaccia IDispatch recuperata da questa funzione e liberare la matrice quando non è più necessaria.
Esempio
La funzione di esempio seguente visualizza una visualizzazione dell'albero degli elementi sotto l'elemento passato. Il nome e il ruolo di ogni elemento vengono stampati da funzioni definite dall'utente che non vengono visualizzate qui.
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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | oleacc.h |
Libreria | Oleacc.lib |
DLL | Oleacc.dll |
Componente ridistribuibile | Accessibilità attiva 1.3 RDK in Windows NT 4.0 con SP6 e versioni successive e Windows 95 |