ITfContext::TrackProperties 方法 (msctf.h)

获取一个特殊属性,该属性可以枚举多个区域中的多个属性。

语法

HRESULT TrackProperties(
  [in]  const GUID          **prgProp,
  [in]  ULONG               cProp,
  [in]  const GUID          **prgAppProp,
  [in]  ULONG               cAppProp,
  [out] ITfReadOnlyProperty **ppProperty
);

parameters

[in] prgProp

包含一个属性标识符数组,这些标识符指定要跟踪的属性。

[in] cProp

包含 prgProp 数组中的属性标识符数。

[in] prgAppProp

包含应用程序属性标识符数组,这些标识符指定要跟踪的应用程序属性。

[in] cAppProp

包含 prgAppProp 数组中的应用程序属性标识符数。

[out] ppProperty

指向接收跟踪属性的 ITfReadOnlyProperty 接口指针的指针。

返回值

此方法可以返回其中一个值。

说明
S_OK
方法成功。
TF_E_DISCONNECTED
上下文对象不在文档堆栈上。
E_OUTOFMEMORY
内存分配失败。
E_INVALIDARG
一个或多个参数无效。

注解

此方法用于快速识别具有多个属性的一致属性值的范围。 虽然只能使用 ITfContext::GetProperty 方法复制此方法,但 TSF 管理器可以更快地完成此任务。

此方法获取的属性是VT_UNKNOWN类型。 此属性可用于通过使用 IID_IEnumTfPropertyValue 调用 QueryInterface 方法来获取 IEnumTfPropertyValue 枚举器。 此枚举器包含 由 prgPropprgAppProp 指定的属性值。

示例


const GUID *rgGuids[2] = {  &GUID_PROP_COMPOSING,
                            &GUID_PROP_ATTRIBUTE };
HRESULT hr;
ITfReadOnlyProperty *pTrackProperty;
TF_SELECTION sel;
IEnumTfRanges *pEnumRanges;
ITfRange *pRangeValue;

// Get the tracking property. 
hr = pContext->TrackProperties(NULL, 0, rgGuids, 2, &pTrackProperty);

// Get the selection range. 
hr = pContext->GetSelection(ec, TF_DEFAULT_SELECTION, 1, &sel, &cFetched);

// Use the property from TrackProperties to get an enumeration of the ranges  
// within the selection range that have the same property values. 
hr = pTrackProperty->EnumRanges(ec, &pEnumRanges, sel.range);

// Enumerate the ranges of text. 
while(pEnumRanges->Next(1, &pRangeValue, NULL) == S_OK)
{
    VARIANT varTrackerValue;
    TF_PROPERTYVAL tfPropertyVal;
    IEnumTfPropertyValue *pEnumPropVal;

    // Get the values for this range of text. 
    hr = pTrackProperty->GetValue(ec, pRangeValue, &varTrackerValue);

    // Because pTrackProperties originates from TrackProperties, 
    // varTrackerValue can be identified as a VT_UNKNOWN/IEnumTfPropertyValue. 
    varTrackerValue.punkVal->QueryInterface(    IID_IEnumTfPropertyValue,
                                                (void **)&pEnumPropVal);

    while(pEnumPropVal->Next(1, &tfPropertyVal, NULL) == S_OK)
    {
        BOOL fComposingValue;
        TfGuidAtom gaDispAttrValue;
        
        // Is this the composition property? 
        if (IsEqualGUID(tfPropertyVal.guidId, GUID_PROP_COMPOSING))
        {
            fComposingValue = (BOOL)tfPropertyVal.varValue.lVal;
        }
        // Or is this the attribute property? 
        else if (IsEqualGUID(tfPropertyVal.guidId, GUID_PROP_ATTRIBUTE))
        {
            gaDispAttrValue = (TfGuidAtom)tfPropertyVal.varValue.lVal;
        }
        
        // Clear the property. 
        VariantClear(&tfPropertyVal.varValue);
    }

    // Clear the tracker property. 
    VariantClear(&varTrackerValue);

    // Release the property enumerator. 
    pEnumPropVal->Release();

    // Release the range. 
    pRangeValue->Release();
}

// Release the selection range. 
sel.range->Release();

要求

   
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 msctf.h
DLL Msctf.dll
可再发行组件 Windows 2000 专业版上的 TSF 1.0

另请参阅

IEnumTfPropertyValue

ITfContext

ITfContext::GetProperty

ITfReadOnlyProperty