Condividi tramite


Uso degli attributi di visualizzazione

Text Services Framework (TSF) consente a un servizio di testo di fornire attributi di visualizzazione per il testo. Ciò consente a un'applicazione di visualizzare commenti visivi aggiuntivi. Ad esempio, un servizio di testo del correttore ortografico può evidenziare una parola con ortografia errata con una sottolineatura rossa. Gli attributi di visualizzazione che possono essere forniti sono definiti dalla struttura TF_DISPLAYATTRIBUTE e includono il colore del testo, il colore di sfondo del testo, lo stile di sottolineatura, il colore di sottolineatura e lo spessore della sottolineatura.

Durante il rendering del testo, un'applicazione deve ottenere gli attributi di visualizzazione per il testo disegnato e usare gli attributi per modificare la modalità di disegno del testo. Completare i passaggi seguenti per ottenere gli attributi di visualizzazione.

  1. Ottenere un oggetto proprietà per GUID_PROP_ATTRIBUTE chiamando ITfContext::GetProperty.
  2. Ottenere il valore del GUID_PROP_ATTRIBUTE per l'intervallo specificato chiamando ITfReadOnlyProperty::GetValue. Viene fornito un valore TfGuidAtom .
  3. Convertire il valore TfGuidAtom in un GUID chiamando ITfCategoryMgr::GetGUID.
  4. Creare un oggetto ITfDisplayAttributeInfo per l'attributo di visualizzazione chiamando ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
  5. Ottenere le informazioni sull'attributo di visualizzazione chiamando ITfDisplayAttributeInfo::GetAttributeInfo.

Nell'esempio di codice seguente viene illustrata una funzione che ottiene gli attributi di visualizzazione da un contesto, un intervallo e un cookie di modifica forniti.

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