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 可访问的返回值。
错误 | 说明 |
---|---|
|
自变量无效。 |
注解
如果返回预定义的状态值,客户端将调用 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 |