AccessibleChildren 関数 (oleacc.h)

アクセス可能なコンテナー オブジェクト内の各子の子 ID または IDispatch を取得します。

構文

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

パラメーター

[in] paccContainer

種類: IAccessible*

コンテナー オブジェクトの IAccessible インターフェイスへのポインター。

[in] iChildStart

型: LONG

取得する最初の子の 0 から始まるインデックスを指定します。 このパラメーターは、子 ID ではなくインデックスであり、通常はゼロ (0) に設定されます。

[in] cChildren

型: LONG

取得する子の数を指定します。 現在の子の数を取得するために、アプリケーションは IAccessible::get_accChildCount を呼び出します。

[out] rgvarChildren

型: VARIANT*

コンテナーの子に関する情報を受け取る VARIANT 構造体の配列へのポインター。 配列要素の vt メンバーがVT_I4場合、その要素の lVal メンバーは子 ID になります。 配列要素の vt メンバーがVT_DISPATCH場合、その要素の pdispVal メンバーは子オブジェクトの IDispatch インターフェイスのアドレスです。

[out] pcObtained

型: LONG*

AccessibleChildren 関数によって設定される rgvarChildren 配列内の要素の数を受け取る変数のアドレス。 この値は cChildren パラメーターの値と同じです。ただし、存在するより多くの子を要求した場合、この値は cChildren よりも小さくなります。

戻り値

型: STDAPI

成功した場合は、S_OK を返します。

成功しなかった場合は、次のいずれかの標準 COM エラー コードを返します。

リターン コード 説明
E_INVALIDARG
引数が有効ではありません。
S_FALSE
関数は成功しましたが、 rgvarChildren 配列内の要素は 、cChildren で要求された子よりも少なくなります。

注釈

コンテナー内のすべての子に関する情報を取得するには、 iChildStart パラメーターを 0 (0) にし、 cChildrenIAccessible::get_accChildCount によって返される値にする必要があります。

この関数を呼び出してユーザー インターフェイス要素の子に関する情報を取得する場合は、クライアントがすべての子に関する情報を取得することをお勧めします。 たとえば、 iChildStart は 0 (0) である必要があり、 cChildrenIAccessible::get_accChildCount によって返される値である必要があります。

要素に対して子 ID が返される場合、コンテナーは子要素に関する情報を提供する必要があります。 要素に関する情報を取得するために、クライアントはコンテナーの IAccessible インターフェイス ポインターを使用し、 IAccessible プロパティの呼び出しで取得した子 ID を指定します。

クライアントは、この関数によって取得された IDispatch インターフェイスに対して IUnknown::Release メソッドを呼び出し、不要になったら配列を解放する必要があります。

次の関数例は、渡された要素の下に要素ツリーのビューを表示します。 各要素の名前とロールは、ここには示されていないユーザー定義関数によって出力されます。


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

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー oleacc.h
Library Oleacc.lib
[DLL] Oleacc.dll
再頒布可能パッケージ SP6 以降および Windows 95 を使用した Windows NT 4.0 のアクティブなアクセシビリティ 1.3 RDK

こちらもご覧ください

Iaccessible

IDispatch

バリアント