Partilhar via


Usando atributos de exibição

O Text Services Framework (TSF) permite que um serviço de texto forneça atributos de exibição para texto. Isso permite que um aplicativo exiba comentários visuais adicionais. Por exemplo, um serviço de verificação ortográfica pode realçar uma palavra incorreta com um sublinhado vermelho. Os atributos de exibição que podem ser fornecidos são definidos pela estrutura TF_DISPLAYATTRIBUTE e incluem cor do texto, cor do plano de fundo do texto, estilo do sublinhado, cor do sublinhado e espessura do sublinhado.

Ao renderizar texto, um aplicativo deve obter os atributos de exibição para o texto desenhado e usar os atributos para modificar como o texto é desenhado. Conclua as etapas a seguir para obter atributos de exibição.

  1. Obtenha um objeto de propriedade para GUID_PROP_ATTRIBUTE chamando ITfContext::GetProperty.
  2. Obtenha o valor do GUID_PROP_ATTRIBUTE para o intervalo especificado chamando ITfReadOnlyProperty::GetValue. Isso fornece um valor TfGuidAtom .
  3. Converta o valor de TfGuidAtom num GUID chamando ITfCategoryMgr::GetGUID.
  4. Crie um objeto de ITfDisplayAttributeInfo para o atributo de exibição chamando ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
  5. Obtenha as informações do atributo de exibição chamando ITfDisplayAttributeInfo::GetAttributeInfo.

O exemplo de código a seguir demonstra uma função que obtém os atributos de exibição de um contexto fornecido, intervalo e cookie de edição.

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