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 bagaimana teks digambar. Selesaikan langkah-langkah berikut untuk mendapatkan atribut tampilan.
- Dapatkan objek properti untuk GUID_PROP_ATTRIBUTE dengan memanggil ITfContext::GetProperty.
- Dapatkan nilai GUID_PROP_ATTRIBUTE untuk rentang yang ditentukan dengan memanggil ITfReadOnlyProperty::GetValue. Ini memasok nilai TfGuidAtom.
- Konversi nilai TfGuidAtom menjadi GUID dengan memanggil ITfCategoryMgr::GetGUID.
- Buat objek ITfDisplayAttributeInfo untuk atribut tampilan dengan memanggil ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
- 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;
}
Topik terkait
-
ITfDisplayAttributeInfo::GetAttributeInfo (Mengambil Informasi Atribut)