IAccessible::get_accState 方法 (oleacc.h)

IAccessible::get_accState 方法检索指定对象的当前状态。 所有对象都支持此属性。

语法

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

参数

[in] varChild

类型: VARIANT

指定检索到的状态信息是属于 对象还是对象的子元素之一。 此参数是获取有关对象) 信息的CHILDID_SELF (,也可以是子 ID (以获取有关对象子元素的信息) 。 有关初始化 VARIANT 的详细信息,请参阅 如何在参数中使用子 ID

[out, retval] pvarState

类型: VARIANT*

用于接收描述对象状态的信息的 VARIANT 结构的 地址。 vt 成员VT_I4,lVal 成员是一个或多个对象状态常量

返回值

类型: HRESULT

如果成功,则返回 S_OK。

如果未成功,则返回下表中的值之一或另一个标准 COM 错误代码。 服务器返回这些值,但客户端必须始终检查输出参数,以确保它们包含有效值。 有关详细信息,请参阅 检查 I 可访问的返回值

错误 说明
E_INVALIDARG
自变量无效。

注解

如果返回预定义的状态值,客户端将调用 GetStateText 来检索描述对象状态的本地化字符串。

子级的实际状态通常取决于其祖先的状态。 例如,打开模式对话框时,应用程序main窗口中的控件不可聚焦,但控件可能不会报告此状态。 若要验证子对象的状态信息,请为父对象调用 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 Professional [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 oleacc.h
Library Oleacc.lib
DLL Oleacc.dll
可再发行组件 Windows NT 4.0 和 Windows 95 上的活动辅助功能 1.3 RDK

另请参阅

GetStateText

IAccessible

对象状态常量

State 属性

VARIANT