Método IAccessible::get_accState (oleacc.h)

El método IAccessible::get_accState recupera el estado actual del objeto especificado. Todos los objetos admiten esta propiedad.

Sintaxis

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

Parámetros

[in] varChild

Tipo: VARIANT

Especifica si la información de estado recuperada pertenece al objeto o a uno de los elementos secundarios del objeto. Este parámetro es CHILDID_SELF (para obtener información sobre el objeto) o un identificador secundario (para obtener información sobre el elemento secundario del objeto). Para obtener más información sobre cómo inicializar variant, vea Cómo se usan los identificadores secundarios en parámetros.

[out, retval] pvarState

Tipo: VARIANT*

Dirección de una estructura VARIANT que recibe información que describe el estado del objeto. El miembro vt es VT_I4 y el miembro lVal es una o varias de las constantes de estado del objeto.

Valor devuelto

Tipo: HRESULT

Si se ejecuta correctamente, devuelve S_OK.

Si no se ejecuta correctamente, devuelve uno de los valores de la tabla siguiente u otro código de error COM estándar. Los servidores devuelven estos valores, pero los clientes siempre deben comprobar los parámetros de salida para asegurarse de que contienen valores válidos. Para obtener más información, vea Comprobar valores devueltos de IAccessible.

Error Descripción
E_INVALIDARG
Un argumento no es válido.

Comentarios

Si se devuelven valores de estado predefinidos, los clientes llaman a GetStateText para recuperar una cadena localizada que describe el estado del objeto.

El estado real de un elemento secundario a menudo depende del estado de sus antecesores. Por ejemplo, los controles de la ventana principal de una aplicación no se pueden centrar cuando se abre un cuadro de diálogo modal, pero es posible que los controles no informen de este estado. Para comprobar la información de estado de un objeto secundario, llame a get_accState para el objeto primario.

Nota para los desarrolladores de servidores: Debe usar las constantes de estado predefinidas.

Ejemplo de servidor

En el código de ejemplo siguiente se muestra una posible implementación de este método para un cuadro de lista personalizado que mantiene sus propios elementos secundarios (elementos de lista), solo uno de los cuales se puede seleccionar a la vez. Si el cliente solicita el estado del cuadro de lista en sí, el método pasa la llamada al objeto accesible estándar que sirve a la ventana de control. Para los elementos secundarios, se devuelven marcas diferentes en función de si el elemento está seleccionado o no.

// 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;
};

Ejemplo de cliente

La siguiente función de ejemplo muestra los estados del objeto accesible especificado o un elemento secundario.

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;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado oleacc.h
Library Oleacc.lib
Archivo DLL Oleacc.dll
Redistribuible RDK de accesibilidad activa 1.3 en Windows NT 4.0 y Windows 95

Consulte también

GetStateText

IAccessible

Constantes de estado de objeto

Propiedad State

VARIANT