Поделиться через


Метод 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.

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

См. также раздел

GetStateText

IAccessible

Константы состояния объекта

Свойство State

ВАРИАНТ