Share via


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
E_INVALIDARG
Un argomento non è valido.
S_FALSE
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

Vedi anche

Iaccessible

Idispatch

VARIANTE