Méthode IAccessible ::get_accState (oleacc.h)
La méthode IAccessible ::get_accState récupère l’état actuel de l’objet spécifié. Tous les objets prennent en charge cette propriété.
Syntaxe
HRESULT get_accState(
[in] VARIANT varChild,
[out, retval] VARIANT *pvarState
);
Paramètres
[in] varChild
Type : VARIANT
Spécifie si les informations d’état récupérées appartiennent à l’objet ou à l’un des éléments enfants de l’objet. Ce paramètre est soit CHILDID_SELF (pour obtenir des informations sur l’objet) soit un ID enfant (pour obtenir des informations sur l’élément enfant de l’objet). Pour plus d’informations sur l’initialisation du VARIANT, consultez Utilisation des ID enfants dans les paramètres.
[out, retval] pvarState
Type : VARIANT*
Adresse d’une structure VARIANT qui reçoit des informations qui décrivent l’état de l’objet. Le membre vt est VT_I4, et le membre lVal est une ou plusieurs constantes d’état d’objet.
Valeur retournée
Type : HRESULT
En cas de réussite, retourne S_OK.
En cas de non-réussite, retourne l’une des valeurs de la table qui suit ou un autre code d’erreur COM standard. Les serveurs retournent ces valeurs, mais les clients doivent toujours case activée paramètres de sortie pour s’assurer qu’ils contiennent des valeurs valides. Pour plus d’informations, consultez Vérification des valeurs de retour IAccessibles.
Erreur | Description |
---|---|
|
Un argument n’est pas valide. |
Remarques
Si des valeurs d’état prédéfinies sont retournées, les clients appellent GetStateText pour récupérer une chaîne localisée qui décrit l’état de l’objet.
L’état réel d’un enfant dépend souvent de l’état de ses ancêtres. Par exemple, les contrôles dans la fenêtre main d’une application ne sont pas focusables lorsqu’une boîte de dialogue modale est ouverte, mais les contrôles peuvent ne pas signaler cet état. Pour vérifier les informations d’état d’un objet enfant, appelez get_accState pour l’objet parent.
Remarque aux développeurs de serveurs : Vous devez utiliser les constantes d’état prédéfinies.
Exemple de serveur
L’exemple de code suivant montre une implémentation possible de cette méthode pour une zone de liste personnalisée qui gère ses propres éléments enfants (éléments de liste), dont un seul peut être sélectionné à la fois. Si le client demande l’état de la zone de liste elle-même, la méthode passe l’appel à l’objet accessible standard qui sert la fenêtre de contrôle. Pour les éléments enfants, différents indicateurs sont retournés selon que l’élément est sélectionné ou non.
// 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;
};
Exemple de client
L’exemple de fonction suivant affiche les états de l’objet accessible spécifié ou d’un élément enfant.
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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | oleacc.h |
Bibliothèque | Oleacc.lib |
DLL | Oleacc.dll |
Composant redistribuable | Active Accessibility 1.3 RDK sur Windows NT 4.0 et Windows 95 |