IAccessible::get_accState 方法 (oleacc.h)

IAccessible::get_accState 方法會擷取指定物件的目前狀態。 所有物件都支援這個屬性。

語法

HRESULT get_accState(
  [in]          VARIANT varChild,
  [out, retval] VARIANT *pvarState
);

參數

[in] varChild

類型: VARIANT

指定擷取的狀態資訊是否屬於物件或其中一個物件的子專案。 此參數CHILDID_SELF (取得对象) 的相關信息或子標識碼 (,以取得對象子元素的相關信息) 。 如需初始化 VARIANT 的詳細資訊,請參閱 如何在參數中使用子標識碼

[out, retval] pvarState

類型: VARIANT*

VARIANT 結構的位址,該結構會接收描述對象狀態的資訊。 vt 成員VT_I4,lVal 成員是一或多個對象狀態常數

傳回值

類型: HRESULT

如果成功,則傳回 S_OK。

如果未成功,則會傳回下表中的其中一個值,或另一個標準 COM 錯誤碼。 伺服器會傳回這些值,但客戶端必須一律檢查輸出參數,以確保它們包含有效的值。 如需詳細資訊,請參閱 檢查 IAccessible 傳回值

錯誤 Description
E_INVALIDARG
引數無效。

備註

如果傳回預先定義的狀態值,用戶端會呼叫 GetStateText 來擷取描述物件狀態的當地語系化字串。

子系的實際狀態通常取決於其上階的狀態。 例如,當模式對話框開啟時,應用程式主視窗中的控件無法設為焦點,但控件可能不會報告此狀態。 若要驗證子物件的狀態資訊,請呼叫父物件的 get_accState

請記下伺服器開發人員: 您必須使用預先定義的狀態常數。

伺服器範例

下列範例程式代碼示範自定義清單框的這個方法可能實作,以維護自己的子專案 (清單專案) ,一次只能選取其中一個專案。 如果用戶端要求清單框本身的狀態,此方法會將呼叫傳遞給提供控件視窗的標準可存取物件。 針對子專案,會根據是否選取專案,傳回不同的旗標。

// m_pStdAccessibleObject is the standard accessible object returned by CreateAccessibleObject. 
// m_pControl is the custom control instance that returns this accessible object. 

HRESULT STDMETHODCALLTYPE AccServer::get_accState( 
    VARIANT varChild,
    VARIANT *pvarState)
{
    if (varChild.vt != VT_I4)
    {
        pvarState->vt = VT_EMPTY;
        return E_INVALIDARG;
    }
    if (varChild.lVal == CHILDID_SELF)
    {
        return m_pStdAccessibleObject->get_accState(varChild, pvarState);
    }
    else  // For list items. 
    {
        DWORD flags = STATE_SYSTEM_SELECTABLE;
        int index = (int)varChild.lVal - 1;
        if (index == m_pControl->GetSelectedIndex())
        {
            flags |= STATE_SYSTEM_SELECTED;
        }
        pvarState->vt = VT_I4;
        pvarState->lVal = flags; 
    }
    return S_OK;
};

用戶端範例

下列範例函式會顯示指定之可存取物件或子項目的狀態。

HRESULT PrintState(IAccessible* pAcc, long childId)
{
    if (pAcc == NULL)
    {
        return E_INVALIDARG;    
    }
    VARIANT      varChild;
    varChild.vt = VT_I4;
    varChild.lVal = childId;
    VARIANT varResult;
    HRESULT hr = pAcc->get_accState(varChild, &varResult);
    long stateBits = 0;
    if ((hr == S_OK) && (varResult.vt == VT_I4))
    {
        printf("State: ");
        stateBits = (DWORD)varResult.lVal;
        for (DWORD mask = 1; mask <= 0x8000; mask <<= 1)
        {
            if (mask & stateBits)
            {

                // Get the length of the string. 
                UINT stateLength = GetStateText(mask, NULL, 0);

                // Allocate memory for the string. Add one character to 
                // the length you got in the previous call to make room 
                // for the null character. 
                LPTSTR lpszStateString = (LPTSTR)malloc(
                    (stateLength + 1) * sizeof(TCHAR));
                if (lpszStateString != NULL)
                {
                    // Get the string. 
                    GetStateText(mask, 
                        lpszStateString, stateLength + 1); 
#ifdef UNICODE
                    printf("%S\n", lpszStateString);
#else
                    printf(("%s\n", lpszStateString);
#endif
                    // Free the allocated memory
                    free(lpszStateString);
                }
                else 
                {
                    return E_OUTOFMEMORY;
                }
            }
        }
    }
    return hr;
}

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平台 Windows
標頭 oleacc.h
程式庫 Oleacc.lib
Dll Oleacc.dll
可轉散發套件 Windows NT 4.0 和 Windows 95 上的 Active Accessibility 1.3 RDK

另請參閱

GetStateText

IAccessible

對象狀態常數

State 屬性

變異