使用显示属性
文本服务框架 (TSF) 使文本服务能够为文本提供显示属性。 这使应用程序能够显示其他视觉反馈。 例如,拼写检查器文本服务可以使用红色下划线突出显示拼写错误的单词。 可以提供的显示属性由 TF_DISPLAYATTRIBUTE 结构定义,包括文本颜色、文本背景色、下划线样式、下划线颜色和下划线粗细。
呈现文本时,应用程序应获取所绘制文本的显示属性,并使用属性修改文本的绘制方式。 完成以下步骤以获取显示属性。
- 通过调用 ITfContext::GetProperty 获取GUID_PROP_ATTRIBUTE的属性对象。
- 通过调用 ITfReadOnlyProperty::GetValue 获取指定范围的GUID_PROP_ATTRIBUTE的值。 这会提供 TfGuidAtom 值。
- 通过调用 ITfCategoryMgr::GetGUID,将 TfGuidAtom 值转换为 GUID。
- 通过调用 ITfDisplayAttributeMgr::GetDisplayAttributeInfo 为显示属性创建 ITfDisplayAttributeInfo 对象。
- 通过调用 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