Menggunakan Atribut Tampilan

Text Services Framework (TSF) memungkinkan layanan teks menyediakan atribut tampilan untuk teks. Ini memungkinkan aplikasi untuk menampilkan umpan balik visual tambahan. Misalnya, layanan teks pemeriksa ejaan dapat menyoroti kata yang salah eja dengan garis bawah merah. Atribut tampilan yang dapat disediakan ditentukan oleh struktur TF_DISPLAYATTRIBUTE dan menyertakan warna teks, warna latar belakang teks, gaya garis bawah, warna garis bawah, dan bobot garis bawah.

Saat merender teks, aplikasi harus mendapatkan atribut tampilan untuk teks yang digambar dan menggunakan atribut untuk memodifikasi cara teks digambar. Selesaikan langkah-langkah berikut untuk mendapatkan atribut tampilan.

  1. Dapatkan objek properti untuk GUID_PROP_ATTRIBUTE dengan memanggil ITfContext::GetProperty.
  2. Dapatkan nilai GUID_PROP_ATTRIBUTE untuk rentang yang ditentukan dengan memanggil ITfReadOnlyProperty::GetValue. Ini memasok nilai TfGuidAtom .
  3. Konversikan nilai TfGuidAtom menjadi GUID dengan memanggil ITfCategoryMgr::GetGUID.
  4. Buat objek ITfDisplayAttributeInfo untuk atribut tampilan dengan memanggil ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
  5. Dapatkan informasi atribut tampilan dengan memanggil ITfDisplayAttributeInfo::GetAttributeInfo.

Contoh kode berikut menunjukkan fungsi yang mendapatkan atribut tampilan dari konteks, rentang, dan cookie edit yang disediakan.

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