IAccessible::get_accState-Methode (oleacc.h)

Die IAccessible::get_accState-Methode ruft den aktuellen Zustand des angegebenen Objekts ab. Alle -Objekte unterstützen diese Eigenschaft.

Syntax

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

Parameter

[in] varChild

Typ: VARIANT

Gibt an, ob die abgerufenen Zustandsinformationen zum -Objekt oder zu einem der untergeordneten Elemente des Objekts gehören. Dieser Parameter ist entweder CHILDID_SELF (zum Abrufen von Informationen über das Objekt) oder eine untergeordnete ID (zum Abrufen von Informationen über das untergeordnete Element des Objekts). Weitere Informationen zum Initialisieren von VARIANT finden Sie unter Verwenden untergeordneter IDs in Parametern.

[out, retval] pvarState

Typ: VARIANT*

Adresse einer VARIANT-Struktur , die Informationen empfängt, die den Zustand des Objekts beschreiben. Der vt-Member ist VT_I4, und der lVal-Member ist eine oder mehrere der Objektzustandskonstanten.

Rückgabewert

Typ: HRESULT

Gibt bei Erfolg S_OK zurück.

Wenn dies nicht erfolgreich ist, gibt einen der Werte in der folgenden Tabelle oder einen anderen COM-Standardfehlercode zurück. Server geben diese Werte zurück, aber Clients müssen die Ausgabeparameter immer überprüfen, um sicherzustellen, dass sie gültige Werte enthalten. Weitere Informationen finden Sie unter Überprüfen von IAccessible-Rückgabewerten.

Fehler BESCHREIBUNG
E_INVALIDARG
Ein Argument ist ungültig.

Hinweise

Wenn vordefinierte Zustandswerte zurückgegeben werden, rufen Clients GetStateText auf, um eine lokalisierte Zeichenfolge abzurufen, die den Zustand des Objekts beschreibt.

Der tatsächliche Zustand eines Kindes hängt oft vom Zustand seiner Vorfahren ab. Beispielsweise sind Steuerelemente im Standard Fenster einer Anwendung nicht fokussierbar, wenn ein modales Dialogfeld geöffnet ist, aber die Steuerelemente können diesen Zustand möglicherweise nicht melden. Um die Zustandsinformationen eines untergeordneten Objekts zu überprüfen, rufen Sie get_accState für das übergeordnete Objekt auf.

Hinweis für Serverentwickler: Sie müssen die vordefinierten Zustandskonstanten verwenden.

Serverbeispiel

Der folgende Beispielcode zeigt eine mögliche Implementierung dieser Methode für ein benutzerdefiniertes Listenfeld, das seine eigenen untergeordneten Elemente (Listenelemente) verwaltet, von denen jeweils nur eines ausgewählt werden kann. Wenn der Client den Status des Listenfelds selbst anfordert, übergibt die -Methode den Aufruf des barrierefreien Standardobjekts, das das Steuerelementfenster bedient. Bei untergeordneten Elementen werden je nachdem, ob das Element ausgewählt ist oder nicht, unterschiedliche Flags zurückgegeben.

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

Clientbeispiel

Die folgende Beispielfunktion zeigt die Zustände des angegebenen barrierefreien Objekts oder eines untergeordneten Elements an.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile oleacc.h
Bibliothek Oleacc.lib
DLL Oleacc.dll
Verteilbare Komponente Active Accessibility 1.3 RDK unter Windows NT 4.0 und Windows 95

Weitere Informationen

GetStateText

Iaccessible

Objektzustandskonstanten

State-Eigenschaft

VARIANTE