ITfContext::TrackProperties メソッド (msctf.h)
複数の範囲に対して複数のプロパティを列挙できる特殊なプロパティを取得します。
構文
HRESULT TrackProperties(
[in] const GUID **prgProp,
[in] ULONG cProp,
[in] const GUID **prgAppProp,
[in] ULONG cAppProp,
[out] ITfReadOnlyProperty **ppProperty
);
パラメーター
[in] prgProp
追跡するプロパティを指定するプロパティ識別子の配列を格納します。
[in] cProp
prgProp 配列内のプロパティ識別子の数を格納します。
[in] prgAppProp
追跡するアプリケーション プロパティを指定するアプリケーション プロパティ識別子の配列を格納します。
[in] cAppProp
prgAppProp 配列内のアプリケーション プロパティ識別子の数を格納します。
[out] ppProperty
追跡プロパティを受け取る ITfReadOnlyProperty インターフェイス ポインターへのポインター。
戻り値
このメソッドは、これらの値のいずれかを返すことができます。
値 | 説明 |
---|---|
|
メソッドは正常に実行されました。 |
|
コンテキスト オブジェクトがドキュメント スタック上にありません。 |
|
メモリ割り当てエラーが発生しました。 |
|
1 つ以上のパラメーターが無効です。 |
解説
このメソッドは、複数のプロパティの一貫性のあるプロパティ値を持つ範囲をすばやく識別するために使用されます。 このメソッドは ITfContext::GetProperty メソッドのみを使用して複製できますが、TSF マネージャーはこのタスクをより迅速に実行できます。
このメソッドによって取得される プロパティは、VT_UNKNOWN型です。 このプロパティは、IID_IEnumTfPropertyValueを使用して QueryInterface メソッドを呼び出すことによって、IEnumTfPropertyValue 列挙子を取得するために使用できます。 この列挙子には、 prgProp および prgAppProp で指定されたプロパティ値 が含まれています。
例
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 Professional [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | msctf.h |
[DLL] | Msctf.dll |
再頒布可能パッケージ | Windows 2000 Professional 上の TSF 1.0 |