Метод 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.
Ошибка | Описание |
---|---|
|
Аргумент является недопустимым. |
Комментарии
Если возвращаются стандартные значения состояния, клиенты вызывают Метод 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 |
Header | oleacc.h |
Библиотека | Oleacc.lib |
DLL | Oleacc.dll |
Распространяемые компоненты | Активные специальные возможности 1.3 RDK в Windows NT 4.0 и Windows 95 |