Share via


AccessibleChildren 函式 (oleacc.h)

擷取可存取容器物件內每個子系的子標識碼或 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) 。

[in] cChildren

類型: LONG

指定要擷取的子係數目。 若要擷取目前的子係數目,應用程式會呼叫 IAccessible::get_accChildCount

[out] rgvarChildren

類型: VARIANT*

VARIANT 結構的陣列指標,該陣列會接收容器子系的相關信息。 如果陣列專案的 vt 成員是VT_I4,則該元素的 lVal 成員是子標識碼。 如果陣列專案的 vt 成員VT_DISPATCH,則該元素的 pdispVal 成員是子物件的 IDispatch 介面位址。

[out] pcObtained

類型: LONG*

接收由 AccessibleChildren 函式填入之 rgvarChildren 陣列中元素數目的變數位址。 這個值與 cChildren 參數的值相同;不過,如果您要求的子係數目超過存在,這個值會小於 cChildren 的子系。

傳回值

類型: STDAPI

如果成功,則傳回 S_OK。

如果未成功,則傳回下列其中一個或另一個標準 COM 錯誤碼

傳回碼 Description
E_INVALIDARG
引數無效。
S_FALSE
函式成功,但 rgvarChildren 陣列中的元素比 cChildren 中要求的子系少。

備註

若要擷取容器中所有子系的相關信息, iChildStart 參數必須是零 (0) , 而 cChildren 必須是 IAccessible::get_accChildCount 所傳回的值。

呼叫此函式以取得使用者介面專案子系的相關信息時,建議用戶端取得所有子系的相關信息。 例如, iChildStart 必須是零 (0) , 而 cChildren 必須是 IAccessible::get_accChildCount 所傳回的值。

如果元素傳回子標識符,則容器必須提供子專案的相關信息。 若要取得元素的相關信息,用戶端會使用容器的 IAccessible 介面指標,並在呼叫 IAccessible 屬性時指定取得的子標識碼。

客戶端必須針對此函式所擷取的任何 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
程式庫 Oleacc.lib
Dll Oleacc.dll
可轉散發套件 Windows NT 4.0 上的 Active Accessibility 1.3 RDK 與 SP6 和更新版本和 Windows 95

另請參閱

IAccessible

IDispatch

變異