Partager via


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

Voir aussi

GetStateText

Iaccessible

Constantes d’état d’objet

Propriété State

VARIANTE