次の方法で共有


表示属性の使用

Text Services Framework (TSF) を使用すると、テキスト サービスでテキストの表示属性を提供できます。 これにより、アプリケーションで追加の視覚的フィードバックを表示できます。 たとえば、スペル チェック テキスト サービスでは、スペル ミスのある単語を赤い下線で強調表示できます。 指定できる表示属性は 、TF_DISPLAYATTRIBUTE 構造によって定義され、テキストの色、テキストの背景色、下線のスタイル、下線の色、下線の太さが含まれます。

テキストをレンダリングする場合、アプリケーションは描画されたテキストの表示属性を取得し、 属性を使用してテキストの描画方法を変更する必要があります。 表示属性を取得するには、次の手順を実行します。

  1. ITfContext::GetProperty を呼び出して、GUID_PROP_ATTRIBUTEのプロパティ オブジェクトを取得します。
  2. ITfReadOnlyProperty::GetValue を呼び出して、指定した範囲のGUID_PROP_ATTRIBUTEの値を取得します。 これにより、 TfGuidAtom 値が 提供されます。
  3. ITfCategoryMgr::GetGUID を呼び出して、TfGuidAtom 値を GUID に変換します。
  4. ITfDisplayAttributeMgr::GetDisplayAttributeInfo を呼び出して、display 属性の ITfDisplayAttributeInfo オブジェクトを作成します
  5. 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;
}

TF_DISPLAYATTRIBUTE

ITfContext::GetProperty

ITfReadOnlyProperty::GetValue

TfGuidAtom

ITfCategoryMgr::GetGUID

ITfDisplayAttributeInfo

ITfDisplayAttributeMgr::GetDisplayAttributeInfo

ITfDisplayAttributeInfo::GetAttributeInfo