다음을 통해 공유


표시 특성 사용

TSF(Text Services Framework)를 사용하면 텍스트 서비스에서 텍스트에 대한 표시 특성을 제공할 수 있습니다. 이렇게 하면 애플리케이션에서 추가 시각적 피드백을 표시할 수 있습니다. 예를 들어 맞춤법 검사기 텍스트 서비스는 맞춤법이 틀린 단어를 빨간색 밑줄로 강조 표시할 수 있습니다. 제공할 수 있는 표시 특성은 TF_DISPLAYATTRIBUTE 구조에 의해 정의되며 텍스트 색, 텍스트 배경색, 밑줄 스타일, 밑줄 색 및 밑줄 두께를 포함합니다.

텍스트를 렌더링할 때 애플리케이션은 그린 텍스트에 대한 표시 특성을 가져오고 특성을 사용하여 텍스트를 그리는 방법을 수정해야 합니다. 다음 단계를 완료하여 표시 특성을 가져옵니다.

  1. ITfContext::GetProperty를 호출하여 GUID_PROP_ATTRIBUTE 속성 개체를 가져옵니다.
  2. ITfReadOnlyProperty::GetValue를 호출하여 지정된 범위에 대한 GUID_PROP_ATTRIBUTE 값을 가져옵니다. TfGuidAtom 값을 제공합니다.
  3. ITfCategoryMgr::GetGUID를 호출하여 TfGuidAtom 값을 GUID로 변환합니다.
  4. ITfDisplayAttributeMgr::GetDisplayAttributeInfo를 호출하여 표시 특성에 대한 ITfDisplayAttributeInfo 개체를 만듭니다.
  5. 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;
}

TF_DISPLAYATTRIBUTE

ITfContext::GetProperty

ITfReadOnlyProperty::GetValue

TfGuidAtom

ITfCategoryMgr::GetGUID

ITfDisplayAttributeInfo

ITfDisplayAttributeMgr::GetDisplayAttributeInfo

ITfDisplayAttributeInfo::GetAttributeInfo