使用顯示內容
Text Services Framework (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