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