Dela via


Använda visningsattribut

Med Text Services Framework (TSF) kan en texttjänst tillhandahålla visningsattribut för text. På så sätt kan ett program visa ytterligare visuell feedback. En texttjänst för stavningskontroll kan till exempel markera ett felstavat ord med en röd understrykning. De visningsattribut som kan anges definieras av den TF_DISPLAYATTRIBUTE strukturen och innehåller textfärg, textbakgrundsfärg, understrykningsformat, understrykningsfärg och understrykningsvikt.

När du återger text bör ett program hämta visningsattributen för texten som ritas och använda attributen för att ändra hur texten ritas. Utför följande steg för att hämta visningsattribut.

  1. Hämta ett egenskapsobjekt för GUID_PROP_ATTRIBUTE genom att anropa ITfContext::GetProperty.
  2. Hämta värdet för GUID_PROP_ATTRIBUTE för det angivna intervallet genom att anropa ITfReadOnlyProperty::GetValue. Detta tillhandahåller ett TfGuidAtom- värde.
  3. Konvertera värdet TfGuidAtom till ett GUID genom att anropa ITfCategoryMgr::GetGUID.
  4. Skapa ett ITfDisplayAttributeInfo-objekt för visningsattributet genom att anropa ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
  5. Hämta information om visningsattributet genom att anropa ITfDisplayAttributeInfo::GetAttributeInfo.

I följande kodexempel visas en funktion som hämtar visningsattributen från en angiven kontext, ett intervall och en redigeringscookie.

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