IAccessible :: get_accRole用于检索描述指定对象的角色的信息。所有对象都支持此属性。
HRESULT get_accRole(
VARIANT varChild,
VARIANT *pvarRole
);
参数
varChild
类型:VARIANT
指定检索到的角色信息是属于对象还是属于对象的子元素之一。此参数是 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。有关初始化VARIANT 的更多信息,请参阅如何在参数中使用子 ID。
pvarRole
类型:VARIANT*
接收对象角色常量的VARIANT 的地址。该VT(Variant Type,变量类型)成员必须是VT_I4(int32)。所述LVAL构件接收对象角色恒定。
返回值类型:HRESULT
如果成功,则返回 S_OK。
如果不成功,则返回下表中的值之一,或另一个标准COM 错误代码。服务器返回这些值,但客户端必须始终检查输出参数以确保它们包含有效值。有关更多信息,请参阅检查 IAccessible 返回值。
错误描述
注意:
E_INVALIDARG
论证无效。客户端调用GetRoleText来检索描述对象角色的本地化字符串。
服务器开发人员注意: 您必须使用预定义的角色常量。
服务器示例以下示例代码是此方法的一种可能实现,用于维护自己的列表项的自定义列表框。
HRESULT STDMETHODCALLTYPE AccServer::get_accRole(
VARIANT varChild,
VARIANT *pvarRole)
{
if (varChild.vt != VT_I4)
{
pvarRole->vt = VT_EMPTY;
return E_INVALIDARG;
}
pvarRole->vt = VT_I4;
if (varChild.lVal == CHILDID_SELF)
{
pvarRole->lVal = ROLE_SYSTEM_LIST;
}
else
{
pvarRole->lVal = ROLE_SYSTEM_LISTITEM;
}
return S_OK;
};
客户端示例
以下示例函数显示可访问对象或子元素的角色。
HRESULT PrintRole(IAccessible* pAcc, long childId)
{
DWORD roleId;
if (pAcc == NULL)
{
return E_INVALIDARG;
}
VARIANT varChild;
varChild.vt = VT_I4;
varChild.lVal = childId;
VARIANT varResult;
HRESULT hr = pAcc->get_accRole(varChild, &varResult);
if ((hr == S_OK) && (varResult.vt == VT_I4))
{
roleId = varResult.lVal;
UINT roleLength;
LPTSTR lpszRoleString;
// Get the length of the string.
roleLength = GetRoleText(roleId, 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.
lpszRoleString = (LPTSTR)malloc((roleLength+1) * sizeof(TCHAR));
if (lpszRoleString != NULL)
{
// Get the string.
GetRoleText(roleId, lpszRoleString, roleLength + 1);
#ifdef UNICODE
printf("Role: %S\n", lpszRoleString);
#else
printf(("Role: %s\n", lpszRoleString);
#endif
// Free the allocated memory
free(lpszRoleString);
}
else
{
return E_OUTOFMEMORY;
}
}
return S_OK;
}