表示属性の使用
Text Services Framework (TSF) を使用すると、テキスト サービスでテキストの表示属性を提供できます。 これにより、アプリケーションで追加の視覚的フィードバックを表示できます。 たとえば、スペル チェック テキスト サービスでは、スペル ミスのある単語を赤い下線で強調表示できます。 指定できる表示属性は 、TF_DISPLAYATTRIBUTE 構造によって定義され、テキストの色、テキストの背景色、下線のスタイル、下線の色、下線の太さが含まれます。
テキストをレンダリングする場合、アプリケーションは描画されたテキストの表示属性を取得し、 属性を使用してテキストの描画方法を変更する必要があります。 表示属性を取得するには、次の手順を実行します。
- ITfContext::GetProperty を呼び出して、GUID_PROP_ATTRIBUTEのプロパティ オブジェクトを取得します。
- ITfReadOnlyProperty::GetValue を呼び出して、指定した範囲のGUID_PROP_ATTRIBUTEの値を取得します。 これにより、 TfGuidAtom 値が 提供されます。
- ITfCategoryMgr::GetGUID を呼び出して、TfGuidAtom 値を GUID に変換します。
- ITfDisplayAttributeMgr::GetDisplayAttributeInfo を呼び出して、display 属性の 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