표시 특성 사용
TSF(Text Services Framework)를 사용하면 텍스트 서비스에서 텍스트에 대한 표시 특성을 제공할 수 있습니다. 이렇게 하면 애플리케이션에서 추가 시각적 피드백을 표시할 수 있습니다. 예를 들어 맞춤법 검사기 텍스트 서비스는 맞춤법이 틀린 단어를 빨간색 밑줄로 강조 표시할 수 있습니다. 제공할 수 있는 표시 특성은 TF_DISPLAYATTRIBUTE 구조에 의해 정의되며 텍스트 색, 텍스트 배경색, 밑줄 스타일, 밑줄 색 및 밑줄 두께를 포함합니다.
텍스트를 렌더링할 때 애플리케이션은 그린 텍스트에 대한 표시 특성을 가져오고 특성을 사용하여 텍스트를 그리는 방법을 수정해야 합니다. 다음 단계를 완료하여 표시 특성을 가져옵니다.
- ITfContext::GetProperty를 호출하여 GUID_PROP_ATTRIBUTE 속성 개체를 가져옵니다.
- ITfReadOnlyProperty::GetValue를 호출하여 지정된 범위에 대한 GUID_PROP_ATTRIBUTE 값을 가져옵니다. TfGuidAtom 값을 제공합니다.
- ITfCategoryMgr::GetGUID를 호출하여 TfGuidAtom 값을 GUID로 변환합니다.
- ITfDisplayAttributeMgr::GetDisplayAttributeInfo를 호출하여 표시 특성에 대한 ITfDisplayAttributeInfo 개체를 만듭니다.
- ITfDisplayAttributeInfo::GetAttributeInfo를 호출하여 표시 특성 정보를 가져옵니다.
다음 코드 예제에서는 제공된 컨텍스트, 범위 및 편집 쿠키에서 표시 특성을 가져오는 함수를 보여 줍니다.
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