Compartir a través de


Uso de atributos para mostrar

Text Services Framework (TSF) permite que un servicio de texto proporcione atributos para mostrar para texto. Esto permite a una aplicación mostrar comentarios visuales adicionales. Por ejemplo, un servicio de texto de corrector ortográfico puede resaltar una palabra mal escrita con un subrayado rojo. Los atributos para mostrar que se pueden proporcionar se definen mediante la estructura TF_DISPLAYATTRIBUTE e incluyen el color del texto, el color de fondo del texto, el estilo de subrayado, el color de subrayado y el grosor del subrayado.

Al representar texto, una aplicación debe obtener los atributos para mostrar del texto dibujado y usar los atributos para modificar cómo se dibuja el texto. Complete los pasos siguientes para obtener los atributos para mostrar.

  1. Obtenga un objeto de propiedad para GUID_PROP_ATTRIBUTE llamando a ITfContext::GetProperty.
  2. Obtenga el valor del GUID_PROP_ATTRIBUTE para el intervalo especificado llamando a ITfReadOnlyProperty::GetValue. Esto proporciona un valor TfGuidAtom .
  3. Convierta el valor tfGuidAtom en un GUID llamando a ITfCategoryMgr::GetGUID.
  4. Cree un objeto ITfDisplayAttributeInfo para el atributo display llamando a ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
  5. Obtenga la información del atributo para mostrar llamando a ITfDisplayAttributeInfo::GetAttributeInfo.

En el ejemplo de código siguiente se muestra una función que obtiene los atributos para mostrar de un contexto, un intervalo y una cookie de edición proporcionados.

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