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

Vedi anche

GetStateText

Iaccessible

Costanti stato oggetto

Proprietà State

VARIANTE