Sdílet prostřednictvím


Použití atributů zobrazení

Architektura textových služeb (TSF) umožňuje textové službě poskytovat atributy zobrazení textu. Aplikace tak může zobrazit další vizuální zpětnou vazbu. Například textová služba kontroly pravopisu může zvýraznit chybně napsané slovo červeným podtržením. Atributy zobrazení, které lze poskytnout, jsou definovány strukturou TF_DISPLAYATTRIBUTE a zahrnují barvu textu, barvu pozadí textu, styl podtržení, barvu podtržení a tloušťku podtržení.

Při vykreslování textu by aplikace měla získat atributy zobrazení pro text nakreslený a použít atributy k úpravě způsobu vykreslení textu. Pokud chcete získat atributy zobrazení, proveďte následující kroky.

  1. Získejte objekt vlastnosti pro GUID_PROP_ATTRIBUTE voláním ITfContext::GetProperty.
  2. Získejte hodnotu GUID_PROP_ATTRIBUTE pro zadanou oblast voláním ITfReadOnlyProperty::GetValue. Toto poskytuje hodnotu TfGuidAtom.
  3. Převeďte hodnotu TfGuidAtom na identifikátor GUID voláním ITfCategoryMgr::GetGUID.
  4. Vytvořte objekt ITfDisplayAttributeInfo pro zobrazovací atribut voláním ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
  5. Získejte informace o atributu zobrazení voláním ITfDisplayAttributeInfo::GetAttributeInfo.

Následující příklad kódu ukazuje funkci, která získá zobrazované atributy z zadaného kontextu, rozsahu a úprav cookie.

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