Metodo IAccess::get_accState (oleacc.h)
Il metodo IAccess::get_accState recupera lo stato corrente dell'oggetto specificato. Tutti gli oggetti supportano questa proprietà.
Sintassi
HRESULT get_accState(
[in] VARIANT varChild,
[out, retval] VARIANT *pvarState
);
Parametri
[in] varChild
Tipo: VARIANT
Specifica se le informazioni sullo stato recuperate appartengono all'oggetto o a uno degli elementi figlio dell'oggetto. Questo parametro è CHILDID_SELF (per ottenere informazioni sull'oggetto) o un ID figlio (per ottenere informazioni sull'elemento figlio dell'oggetto). Per altre informazioni sull'inizializzazione di VARIANT, vedere Come vengono usati gli ID figlio nei parametri.
[out, retval] pvarState
Tipo: VARIANT*
Indirizzo di una struttura VARIANT che riceve informazioni che descrivono lo stato dell'oggetto. Il membro vt è VT_I4 e il membro lVal è una o più costanti dello stato dell'oggetto.
Valore restituito
Tipo: HRESULT
Se ha esito positivo, restituisce S_OK.
In caso contrario, restituisce uno dei valori della tabella che segue o un altro codice di errore COM standard. I server restituiscono questi valori, ma i client devono sempre controllare i parametri di output per assicurarsi che contengano valori validi. Per altre informazioni, vedere Controllo dei valori restituiti IAccessibile.
Errore | Descrizione |
---|---|
|
Un argomento non è valido. |
Commenti
Se vengono restituiti valori di stato predefiniti, i client chiamano GetStateText per recuperare una stringa localizzata che descrive lo stato dell'oggetto.
Lo stato effettivo di un bambino dipende spesso dallo stato dei suoi predecessori. Ad esempio, i controlli nella finestra principale di un'applicazione non sono attivabili quando una finestra di dialogo modale è aperta, ma i controlli potrebbero non segnalare questo stato. Per verificare le informazioni sullo stato di un oggetto figlio, chiamare get_accState per l'oggetto padre.
Nota per gli sviluppatori del server: È necessario usare le costanti di stato predefinite.
Esempio di server
Il codice di esempio seguente mostra un'implementazione possibile di questo metodo per una casella di riepilogo personalizzata che gestisce i propri elementi figlio (elementi di elenco), solo uno dei quali può essere selezionato alla volta. Se il client richiede lo stato della casella di riepilogo stessa, il metodo passa la chiamata all'oggetto accessibile standard che serve la finestra di controllo. Per gli elementi figlio, vengono restituiti flag diversi a seconda che l'elemento sia selezionato o meno.
// 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;
};
Esempio client
La funzione di esempio seguente visualizza gli stati dell'oggetto accessibile specificato o un elemento figlio.
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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | oleacc.h |
Libreria | Oleacc.lib |
DLL | Oleacc.dll |
Componente ridistribuibile | Accessibilità attiva 1.3 RDK in Windows NT 4.0 e Windows 95 |