Freigeben über


Hosten eines fensterlosen ActiveX-Steuerelements zur Benutzeroberflächenautomatisierung

Erfahren Sie, wie Sie einen Steuerelementcontainer erstellen, der fensterlose Microsoft ActiveX-Steuerelemente hosten kann, die Microsoft Benutzeroberflächenautomatisierung implementieren. Mit den hier beschriebenen Schritten können Sie sicherstellen, dass alle Benutzeroberflächenautomatisierung fensterlosen Steuerelementen, die in Ihrem Steuerungscontainer gehostet werden, für AT-Clientanwendungen (Assistive Technology) zugänglich sind.

Wichtige Informationen

Technologien

Voraussetzungen

  • C/C++
  • Programmierung von Microsoft Win32 und Component Object Model (COM)
  • Fensterlose ActiveX-Steuerelemente
  • Benutzeroberflächenautomatisierung Anbieter

Anweisungen

Schritt 1: Geben Sie die IRawElementProviderSimple-Schnittstelle im Namen des fensterlosen Steuerelements an.

Wenn das System den IRawElementProviderSimple-Zeiger für den Stamm eines fensterlosen Steuerelements benötigt, fragt das System den Steuerelementcontainer ab. Um den Zeiger abzurufen, ruft der Container die Implementierung des fensterlosen Steuerelements der IServiceProvider::QueryService-Methode auf.

Wenn der Steuerelementcontainer über eine Benutzeroberflächenautomatisierung-Implementierung verfügt, kann er den IRawElementProviderSimple-Zeiger des fensterlosen Steuerelements an das System zurückgeben.

Wenn der Steuerelementcontainer über eine Microsoft Active Accessibility-Implementierung verfügt, rufen Sie die UiaIAccessibleFromProvider-Funktion auf, um einen IAccessible-Schnittstellenzeiger abzurufen, der das Steuerelement darstellt, und geben Sie dann den IAccessible-Schnittstellenzeiger an das System zurück.

Schritt 2: Implementieren der IRawElementProviderWindowlessSite-Schnittstelle.

Ein Steuerelementcontainer implementiert die IRawElementProviderWindowlessSite-Schnittstelle, damit ein Benutzeroberflächenautomatisierung-basiertes fensterloses Steuerelement seine Barrierefreiheitsinformationen kommunizieren kann.

  1. Implementieren Sie IRawElementProviderWindowlessSite::GetRuntimeIdPrefix.

    Ein Fensterloses Steuerelementfragment muss eine eindeutige Laufzeit-ID für sich selbst erstellen. Um die Laufzeit-ID zu erstellen, ruft ein fensterloses Steuerelementfragment einen Präfixwert ab, indem die GetRuntimeIdPrefix-Methode der Steuerelementwebsite aufgerufen wird, und fügt dann an das Präfix einen ganzzahligen Wert an, der im Verhältnis zu allen anderen Fragmenten im fensterlosen Steuerelement eindeutig ist.

    Der Steuerelementstandort für ein fensterloses Steuerelement sollte die GetRuntimeIdPrefix-Methode implementieren, indem ein SAFEARRAY mit der Konstanten UiaAppendRuntimeId und einem ganzzahligen Wert erstellt wird, der für die Website eindeutig ist.

    In diesem Beispiel wird gezeigt, wie ein Laufzeit-ID-Präfix für ein fensterloses Steuerelement zurückgegeben wird.

    IFACEMETHODIMP CProviderWindowlessSite::GetRuntimeIdPrefix(   
         SAFEARRAY **ppsaPrefix)   
    {   
        if (ppsaPrefix == NULL) 
        {
            return E_INVALIDARG;
        }
    
        // m_siteIndex is the index of the windowless control's
        // site. It is defined by the control container.
        int rId[] = { UiaAppendRuntimeId, m_siteIndex };
        SAFEARRAY *psa = SafeArrayCreateVector(VT_I4, 0, 2);  
        if (psa == NULL)
        {
            return E_OUTOFMEMORY;
        }
    
        for (LONG i = 0; i < 2; i++)
        {
            SafeArrayPutElement(psa, &i, (void*)&(rId[i]));
        }
    
        *ppsaPrefix = psa;  
        return S_OK;  
    }  
    
  2. Implementieren Sie die IRawElementProviderWindowlessSite::GetAdjacentFragment-Methode .

    Ein Steuerelement, das Benutzeroberflächenautomatisierung implementiert, muss einen Zeiger auf den übergeordneten Fragmentanbieter des Steuerelements zurückgeben.

    Um das übergeordnete Element des Fragments zurückzugeben, muss ein Objekt, das die IRawElementProviderFragment-Schnittstelle implementiert, die Navigate-Methode implementieren können. Die Implementierung von Navigate ist für ein fensterloses Steuerelement schwierig, da das Steuerelement möglicherweise nicht in der Lage ist, seine Position in der barrierefreien Struktur des übergeordneten Objekts zu bestimmen. Die IRawElementProviderWindowlessSite::GetAdjacentFragment-Methode ermöglicht es dem fensterlosen Steuerelement, seine Website nach dem angrenzenden Fragment abzufragen und dieses Fragment dann an den Client zurückzugeben, der Navigate aufgerufen hat.

    Dieses Beispiel zeigt, wie ein Steuerelementcontainer das übergeordnete Fragment eines fensterlosen Steuerelements abruft.

    IFACEMETHODIMP CProviderWindowlessSite::GetAdjacentFragment(
            enum NavigateDirection direction, IRawElementProviderFragment **ppFragment)   
    {
        if (ppFragment == NULL)
        {
            return E_INVALIDARG;
        }
    
        *ppFragment = NULL;
        HRESULT hr = S_OK;
    
        switch (direction)
        {
            case NavigateDirection_Parent:
                {  
                    IRawElementProviderSimple *pSimple = NULL;
    
                    // Call an application-defined function to retrieve the
                    // parent provider interface.
                    hr = GetParentProvider(&pSimple);  
                    if (SUCCEEDED(hr))  
                    {  
                        // Get the parent's IRawElementProviderFragment interface.
                        hr = pSimple->QueryInterface(IID_PPV_ARGS(ppFragment));  
                        pSimple->Release();  
                    } 
                }  
                break;  
    
            case NavigateDirection_FirstChild:
            case NavigateDirection_LastChild:
                hr = E_INVALIDARG;
                break;
    
            // Ignore NavigateDirection_NextSibling and NavigateDirection_PreviousSibling
            // because there are no adjacent fragments.
            default:  
                break;  
        }  
    
        return hr;  
    }   
    

Schritt 3: Optional: Implementieren Sie die IRawElementProviderHostingAccessibles-Schnittstelle.

Implementieren Sie die IRawElementProviderHostingAccessibles-Schnittstelle, wenn Ihr Steuerungscontainer über eine Benutzeroberflächenautomatisierung Anbieterimplementierung verfügt, die den Stamm einer Barrierefreiheitsstruktur darstellt, die fensterlose ActiveX-Steuerelemente enthält, die Microsoft Active Accessibility unterstützen. Die IRawElementProviderHostingAccessibles-Schnittstelle verfügt über eine einzelne Methode, GetEmbeddedAccessibles, die die IAccessible-Schnittstellenzeiger aller fensterlosen ActiveX-Steuerelemente von Microsoft Active ActiveX abruft, die von Ihrem Steuerelementcontainer gehostet werden.

Hosten eines fensterlosen ACTIVEX-Steuerelements in MSAA

Barrierefreiheit des Fensterlosen ActiveX-Steuerelements