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