Bagikan melalui


Fungsi AccessibleChildren (oleacc.h)

Mengambil ID anak atau IDispatch dari setiap anak dalam objek kontainer yang dapat diakses.

Sintaks

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

Parameter

[in] paccContainer

Jenis: IAccessible*

Penunjuk ke antarmuka IAccessible objek kontainer.

[in] iChildStart

Jenis: LONG

Menentukan indeks berbasis nol dari anak pertama yang diambil. Parameter ini adalah indeks, bukan ID anak, dan biasanya diatur ke nol (0).

[in] cChildren

Jenis: LONG

Menentukan jumlah anak yang akan diambil. Untuk mengambil jumlah anak saat ini, aplikasi memanggil IAccessible::get_accChildCount.

[out] rgvarChildren

Jenis: VARIAN*

Penunjuk ke array struktur VARIAN yang menerima informasi tentang turunan kontainer. Jika anggota vt dari elemen array VT_I4, maka anggota lVal untuk elemen tersebut adalah ID anak. Jika anggota vt dari elemen array VT_DISPATCH, maka anggota pdispVal untuk elemen tersebut adalah alamat antarmuka IDispatch objek anak.

[out] pcObtained

Jenis: LONG*

Alamat variabel yang menerima jumlah elemen dalam array rgvarChildren yang diisi oleh fungsi AccessibleChildren . Nilai ini sama dengan parameter cChildren ; namun, jika Anda meminta lebih banyak anak daripada yang ada, nilai ini akan kurang dari cChildren.

Nilai kembali

Jenis: STDAPI

Jika berhasil, mengembalikan S_OK.

Jika tidak berhasil, mengembalikan salah satu dari kode kesalahan COM standar berikut atau lainnya.

Menampilkan kode Deskripsi
E_INVALIDARG
Argumen tidak valid.
S_FALSE
Fungsi berhasil, tetapi ada lebih sedikit elemen dalam array rgvarChildren daripada yang diminta anak-anak dalam cChildren.

Keterangan

Untuk mengambil informasi tentang semua anak dalam kontainer, parameter iChildStart harus nol (0), dan cChildren harus berupa nilai yang dikembalikan oleh IAccessible::get_accChildCount.

Saat memanggil fungsi ini untuk mendapatkan informasi tentang anak-anak dari elemen antarmuka pengguna, disarankan agar klien mendapatkan informasi tentang semua anak. Misalnya, iChildStart harus nol (0), dan cChildren harus berupa nilai yang dikembalikan oleh IAccessible::get_accChildCount.

Jika ID anak dikembalikan untuk elemen, maka kontainer harus memberikan informasi tentang elemen anak. Untuk mendapatkan informasi tentang elemen , klien menggunakan penunjuk antarmuka IAccessible kontainer dan menentukan ID anak yang diperoleh dalam panggilan ke properti IAccessible .

Klien harus memanggil metode IUnknown::Release untuk antarmuka IDispatch apa pun yang diambil oleh fungsi ini, dan membebaskan array ketika tidak lagi diperlukan.

Contoh

Contoh fungsi berikut menampilkan tampilan pohon elemen di bawah elemen yang diteruskan. Nama dan peran setiap elemen dicetak oleh fungsi yang ditentukan pengguna yang tidak ditampilkan di sini.


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

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header oleacc.h
Pustaka Oleacc.lib
DLL Oleacc.dll
Redistribusi Aksesibilitas Aktif 1.3 RDK di Windows NT 4.0 dengan SP6 dan yang lebih baru dan Windows 95

Lihat juga

IAccessible

IDispatch

VARIAN