Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Text Services Framework (TSF) позволяет службе текста предоставлять атрибуты отображения текста. Это позволяет приложению отображать дополнительные визуальные отзывы. Например, служба проверки орфографии может выделять слово с ошибками с красным подчеркиванием. Атрибуты отображения, которые могут быть предоставлены, определяются структурой TF_DISPLAYATTRIBUTE и включают цвет текста, цвет фона текста, стиль подчеркивания, цвет подчеркивания и вес подчеркивания.
При отрисовке текста приложение должно получить атрибуты отображения для нарисованного текста и использовать атрибуты для изменения способа рисования текста. Чтобы получить атрибуты отображения, выполните следующие действия.
- Получите объект свойства для GUID_PROP_ATTRIBUTE, вызвав ITfContext::GetProperty.
- Получите значение GUID_PROP_ATTRIBUTE для указанного диапазона, вызвав метод ITfReadOnlyProperty::GetValue. Он предоставляет значение TfGuidAtom .
- Преобразуйте значение TfGuidAtom в GUID, вызвав метод ITfCategoryMgr::GetGUID.
- Создайте объект ITfDisplayAttributeInfo для атрибута отображения, вызвав ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
- Получите сведения об атрибуте отображения, вызвав метод ITfDisplayAttributeInfo::GetAttributeInfo.
В следующем примере кода демонстрируется функция, которая получает атрибуты отображения из предоставленного контекста, диапазона и файла cookie редактирования.
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;
}
Связанные темы
-
ITfDisplayAttributeInfo::GetAttributeInfo