Usando atributos de exibição
O TSF (Text Services Framework) permite que um serviço de texto forneça atributos de exibição para texto. Isso permite que um aplicativo exiba comentários visuais adicionais. Por exemplo, um serviço de texto do verificador ortográfico pode realçar uma palavra com ortografia incorreta com um sublinhado vermelho. Os atributos de exibição que podem ser fornecidos são definidos pela estrutura TF_DISPLAYATTRIBUTE e incluem cor do texto, cor da tela de fundo do texto, estilo de sublinhado, cor do sublinhado e peso do sublinhado.
Ao renderizar texto, um aplicativo deve obter os atributos de exibição para o texto desenhado e usar os atributos para modificar como o texto é desenhado. Conclua as etapas a seguir para obter atributos de exibição.
- Obtenha um objeto de propriedade para GUID_PROP_ATTRIBUTE chamando ITfContext::GetProperty.
- Obtenha o valor do GUID_PROP_ATTRIBUTE para o intervalo especificado chamando ITfReadOnlyProperty::GetValue. Isso fornece um valor TfGuidAtom .
- Converta o valor TfGuidAtom em um GUID chamando ITfCategoryMgr::GetGUID.
- Crie um objeto ITfDisplayAttributeInfo para o atributo de exibição chamando ITfDisplayAttributeMgr::GetDisplayAttributeInfo.
- Obtenha as informações de atributo de exibição chamando ITfDisplayAttributeInfo::GetAttributeInfo.
O exemplo de código a seguir demonstra uma função que obtém os atributos de exibição de um contexto, intervalo e cookie de edição fornecidos.
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;
}
Tópicos relacionados
-
ITfDisplayAttributeInfo::GetAttributeInfo