Freigeben über


Verwenden von Anzeigeattributen

Text Services Framework (TSF) ermöglicht es einem Textdienst, Anzeigeattribute für Text bereitzustellen. Dadurch kann eine Anwendung zusätzliches visuelles Feedback anzeigen. Beispielsweise kann ein Rechtschreibprüfungstextdienst ein falsch geschriebenes Wort mit einer roten Unterstreichung hervorheben. Die Anzeigeattribute, die bereitgestellt werden können, werden durch die TF_DISPLAYATTRIBUTE-Struktur definiert und umfassen Textfarbe, Texthintergrundfarbe, Unterstreichungsstil, Unterstreichungsfarbe und Unterstrichsstärke.

Beim Rendern von Text sollte eine Anwendung die Anzeigeattribute für den gezeichneten Text abrufen und die Attribute verwenden, um zu ändern, wie der Text gezeichnet wird. Führen Sie die folgenden Schritte aus, um Anzeigeattribute abzurufen.

  1. Rufen Sie ein Eigenschaftsobjekt für GUID_PROP_ATTRIBUTE ab, indem Sie ITfContext::GetProperty aufrufen.
  2. Rufen Sie den Wert des GUID_PROP_ATTRIBUTE für den angegebenen Bereich ab, indem Sie ITfReadOnlyProperty::GetValue aufrufen. Dies liefert einen TfGuidAtom-Wert .
  3. Konvertieren Sie den TfGuidAtom-Wert in eine GUID, indem Sie ITfCategoryMgr::GetGUID aufrufen.
  4. Erstellen Sie ein ITfDisplayAttributeInfo-Objekt für das display-Attribut, indem Sie ITfDisplayAttributeMgr::GetDisplayAttributeInfo aufrufen.
  5. Rufen Sie die Informationen zum Anzeigeattribut ab, indem Sie ITfDisplayAttributeInfo::GetAttributeInfo aufrufen.

Das folgende Codebeispiel veranschaulicht eine Funktion, die die Anzeigeattribute aus einem bereitgestellten Kontext, Bereich und Bearbeitungscookies abruft.

HRESULT GetDispAttrFromRange(   ITfContext *pContext, 
                                ITfRange *pRange, 
                                TfEditCookie ec, 
                                TF_DISPLAYATTRIBUTE *pDispAttr)
{
    HRESULT     hr;
    
    //Create the category manager. 
    ITfCategoryMgr  *pCategoryMgr;
    hr = CoCreateInstance(  CLSID_TF_CategoryMgr,
                            NULL, 
                            CLSCTX_INPROC_SERVER, 
                            IID_ITfCategoryMgr, 
                            (LPVOID*)&pCategoryMgr);
    if(FAILED(hr))
    {
        return hr;
    }

    //Create the display attribute manager. 
    ITfDisplayAttributeMgr  *pDispMgr;
    hr = CoCreateInstance(  CLSID_TF_DisplayAttributeMgr,
                            NULL, 
                            CLSCTX_INPROC_SERVER, 
                            IID_ITfDisplayAttributeMgr, 
                            (LPVOID*)&pDispMgr);
    if(FAILED(hr))
    {
        pCategoryMgr->Release();
        return hr;
    }
    
    //Get the display attribute property. 
    ITfProperty *pProp;
    hr = pContext->GetProperty(GUID_PROP_ATTRIBUTE, &pProp);
    if(SUCCEEDED(hr))
    {
        VARIANT var;

        VariantInit(&var);
        hr = pProp->GetValue(ec, pRange, &var);
        if(S_OK == hr)  //Returns S_FALSE if the range is not completely covered by the property.  
        {
            if(VT_I4 == var.vt)
            {
                //The property is a guidatom. 
                GUID    guid;

                //Convert the guidatom into a GUID. 
                hr = pCategoryMgr->GetGUID((TfGuidAtom)var.lVal, &guid);
                if(SUCCEEDED(hr))
                {
                    ITfDisplayAttributeInfo *pDispInfo;

                    //Get the display attribute info object for this attribute. 
                    hr = pDispMgr->GetDisplayAttributeInfo(guid, &pDispInfo, NULL);
                    if(SUCCEEDED(hr))
                    {
                        //Get the display attribute info. 
                        hr = pDispInfo->GetAttributeInfo(pDispAttr);

                        pDispInfo->Release();
                    }
                }
            }
            else
            {
                //An error occurred; GUID_PROP_ATTRIBUTE must always be VT_I4. 
                hr = E_FAIL;
            }
            VariantClear(&var);
        }
    pProp->Release();
    }

    pCategoryMgr->Release();
    pDispMgr->Release();

    return hr;
}

TF_DISPLAYATTRIBUTE

ITfContext::GetProperty

ITfReadOnlyProperty::GetValue

TfGuidAtom

ITfCategoryMgr::GetGUID

ITfDisplayAttributeInfo

ITfDisplayAttributeMgr::GetDisplayAttributeInfo

ITfDisplayAttributeInfo::GetAttributeInfo