Win32 API 日本語リファレンス
ホームUI.TextServices › ITfRange

ITfRange

COM
IIDaa80e7ff-2021-11d2-93e0-0060b067b86e継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ITfRange インターフェイスは、テキストサービスやアプリケーションが、指定されたコンテキスト内のテキストを参照し操作するために使用します。インターフェイス ID は IID_ITfRange です。

解説(Remarks)

このインターフェイスは TSF マネージャーが実装します。範囲 (レンジ)、アンカー、埋め込みオブジェクト、その他 TSF が使用するテキストプロパティの詳細については、RangesEmbedded Objects、および Using Text Services Framework 内の各トピックを参照してください。

ITfComposition コンポジションオブジェクトのインスタンスを生成すると、次のコード例のように ITfComposition::GetRange メソッドを呼び出して ITfRange インターフェイスポインターへのポインターを取得できます。


HRESULT         hr;
ITfComposition  *pComposition;
ITfRange        *pRange;
WCHAR           *achBuffer[64];  // テキストを受け取るバッファー。 
ULONG           cch;

hr = pComposition->GetRange(&pRange);
if(SUCCEEDED(hr))
{
    // テキストを走査するループ: 

    do
    {
        cch = ARRAYSIZE(achBuffer);
        hr = pRange->GetText(ec, TF_TF_MOVESTART | TF_TF_IGNOREEND, achBuffer, cch, &cch);
        if(SUCCEEDED(hr))
        {
            // テキストに対して何らかの処理を行う。 

            pRange->Release();
        }
    }
    while (cch == ARRAYSIZE(achBuffer));

    pComposition->Release();
}

現在の ITfRange オブジェクトへのポインターは、TF_SELECTION 構造体の <range> 要素から取得できます。

メソッド 22

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetText(DWORD ec, DWORD dwFlags, LPWSTR pchText, DWORD cchMax, DWORD* pcch)

ITfRange::GetText メソッドは、このテキスト範囲 (レンジ) が対象とする内容を取得します。

ecDWORDin編集コンテキストを識別する編集クッキー。ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。
dwFlagsDWORDin

オプションの動作を指定するビットフィールド。

意味
TF_TF_MOVESTART
範囲の開始アンカーが、返された最後の文字の次の位置まで進められます。
TF_TF_IGNOREEND
メソッドは、範囲の終了アンカーの位置でコピーを停止するのではなく、可能な限り多くの文字で pchText を満たそうとします。
pchTextLPWSTRout範囲内のテキストを受け取るバッファーへのポインター。
cchMaxDWORDinテキストバッファーの最大サイズ。
pcchDWORD*outpchText テキストバッファーに書き込まれた文字数を表す ULONG へのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。
vtbl 4 HRESULT SetText(DWORD ec, DWORD dwFlags, LPWSTR pchText, INT cch)

ITfRange::SetText メソッドは、テキスト範囲 (レンジ) が対象とする内容を置き換えます。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別します。
dwFlagsDWORDin内容の修正に関するオプションの動作を指定します。TF_ST_CORRECTION の値が設定されている場合、この操作は新規内容の作成ではなく既存内容の修正として扱われ、元のテキストプロパティが保持されます。
pchTextLPWSTRin範囲の内容を置き換えるテキストを格納したバッファーへのポインター。
cchINTinpchText の文字数を格納します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
TF_E_COMPOSITION_REJECTED
コンテキストの所有者が既定のコンポジションを拒否しました。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り/書き込みロックを保持していません。
TF_E_RANGE_NOT_COVERED
範囲が呼び出し元のアクティブなコンポジション内にありません。

解説(Remarks)

範囲が複数のリージョンにまたがる場合は、リージョンごとに個別に ITfRange::SetText を呼び出してください。そうしないとメソッドが失敗することがあります。

既定では、テキストサービスは範囲を対象とする一時的なコンポジションを開始および終了し、編集されたテキストに対するコンポジションをコンテキストの所有者が一貫して認識できるようにします。コンポジションの所有者が既定のコンポジションを拒否した場合、メソッドは TF_E_COMPOSITION_REJECTED を返します。既定のコンポジションは、呼び出し元がまだコンポジションを開始していない場合にのみ作成されます。呼び出し元がアクティブなコンポジションを保持している場合、呼び出しは失敗します。

TF_CHAR_EMBEDDED オブジェクトのプレースホルダー文字は、このメソッドに渡せない場合があります。代わりに ITfRange::InsertEmbedded を使用してください。

テキストを挿入する場合、ITFInsertAtSelection:InsertTextAtSelection メソッドは選択範囲の割り当てを必要とせず、範囲が選択と一致していなければならないという制約も回避できます。

vtbl 5 HRESULT GetFormattedText(DWORD ec, IDataObject** ppDataObject)

ITfRange::GetFormattedText メソッドは、テキスト範囲 (レンジ) に含まれる書式付きの内容を取得します。内容は IDataObject インターフェイスをサポートするオブジェクトにパッケージ化されます。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
ppDataObjectIDataObject**out書式付きの内容を含むオブジェクトを受け取る IDataObject ポインターへのポインター。書式付きの内容は STGMEDIUM のグローバルメモリハンドルを使用して取得されます。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_NOTIMPL
コンテキストの所有者は、書式付きテキストを IDataObject オブジェクトとしてエクスポートする機能をサポートしていません。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。

解説(Remarks)

IDataObject の形式と格納方法は、その範囲が属するアプリケーションによって決定されます。

vtbl 6 HRESULT GetEmbedded(DWORD ec, GUID* rguidService, GUID* riid, IUnknown** ppunk)

ITfRange::GetEmbedded メソッドは、テキストストリーム内の TS_CHAR_EMBEDDED 文字に対応する内容を取得します。テキスト範囲 (レンジ) の開始アンカーは、対象となる文字の直前に配置されます。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
rguidServiceGUID*in

埋め込みの内容をどのように取得するかを指定する識別子。

意味
GUID_TS_SERVICE_ACCESSIBLE
出力は Accessible オブジェクト である必要があります。
GUID_TS_SERVICE_ACTIVEX
呼び出し元は、riid で指定されたインターフェイスをサポートするオブジェクトへの直接のポインターを必要とします。
GUID_TS_SERVICE_DATAOBJECT
内容は IDataObject データ転送オブジェクトとして取得され、riid は IID_IDataObject になります。内容のコピーが必要な場合、クライアントはこのオプションを指定してください。
Caller-defined
テキストサービスおよびコンテキストの所有者は、独自のカスタム GUID を定義できます。
riidGUID*in要求するオブジェクトのインターフェイスの UUID。
ppunkIUnknown**outオブジェクトへのポインター。riid に合わせてキャストできます。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_NOTIMPL
実装側のアプリケーションは、テキストストリーム内で埋め込みオブジェクトを公開していません。
TF_E_NOINTERFACE
オブジェクトは要求されたインターフェイスをサポートしていません。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。
TF_E_NOOBJECT
範囲の開始アンカーが TF_CHAR_EMBEDDED 文字の直前に配置されていません。
TF_E_NOSERVICE
rguidService に対応する内容を返せません。

解説(Remarks)

取得したオブジェクトが特定のインターフェイスをサポートしていない場合もありますが、IOleObjectIDataObjectIViewObjectIPersistStorageIOleCacheIDispatch など、埋め込みドキュメントやコントロールに関連するインターフェイスはサポートしている可能性が高いです。呼び出し元は QueryInterface を使用して必要なインターフェイスを調べる必要があります。メソッドが成功しても riidNULL の場合、アプリケーションは埋め込みオブジェクトの存在を示していますが、オブジェクト自体は公開していません。それでもテキストプロセッサーは、単語区切りの可能性についての通知から利益を得られます。

vtbl 7 HRESULT InsertEmbedded(DWORD ec, DWORD dwFlags, IDataObject* pDataObject)

ITfRange::InsertEmbedded メソッドは、テキスト範囲 (レンジ) の開始アンカーの位置にオブジェクトを挿入します。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
dwFlagsDWORDin挿入をどのように行うかを指定するビットフィールド。TF_IE_CORRECTION が設定されている場合、この操作は修正として扱われ、他のテキストサービスが元のテキストに関連付けられたデータを保持できるようになります。
pDataObjectIDataObject*in挿入するデータ転送オブジェクトへのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_NOTIMPL
実装側のアプリケーションは、ストリーム内で埋め込みオブジェクトを公開していません。
TF_E_COMPOSITION_REJECTED
コンテキストの所有者が既定のコンポジションを拒否しました。
TF_E_FORMAT
コンテキストの所有者は、指定されたオブジェクトの型を扱えません。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。
TF_E_RANGE_NOT_COVERED
呼び出し元は既にアクティブなコンポジションを保持していますが、範囲がそのコンポジションの対象外のテキスト上に位置しています。
TF_E_READONLY
ドキュメント、または範囲の位置を変更できません。

解説(Remarks)

TF_CHAR_EMBEDDED オブジェクトのプレースホルダー文字は ITfRange::SetText に渡せないため、テキストストリームにオブジェクトを挿入するにはこのメソッドを使用します。このメソッドは OLE のクリップボード API をモデルにしており、アプリケーションは OleGetClipboard から返される IDataObject と同じように pDataObject を使用します。

範囲が複数のリージョンにまたがる場合は、リージョンごとに個別にこのメソッドを呼び出してください。そうしないとメソッドが失敗することがあります。

既定では、テキストサービスは範囲を対象とする一時的なコンポジションを開始および終了し、編集されたテキストに対するコンポジションをコンテキストの所有者が一貫して認識できるようにします。コンポジションの所有者が既定のコンポジションを拒否した場合、メソッドは TF_E_COMPOSITION_REJECTED を返します。既定のコンポジションは、呼び出し元がまだコンポジションを開始していない場合にのみ作成されます。呼び出し元がアクティブなコンポジションを保持している場合、呼び出しは失敗します。

コンテキストの所有者が特定のオブジェクトの挿入をサポートしているかどうかを事前に確認するには、ITfQueryEmbedded::QueryInsertEmbedded を使用してください。

vtbl 8 HRESULT ShiftStart(DWORD ec, INT cchReq, INT* pcch, TF_HALTCOND* pHalt)

ITfRange::ShiftStart メソッド

ecDWORDin編集コンテキストを識別する編集クッキーを指定します。これは ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。
cchReqINTin開始アンカーを移動する文字数を格納します。負の値を指定するとアンカーは後方へ、正の値を指定すると前方へ移動します。
pcchINT*outアンカーが実際に移動した文字数を受け取る LONG 値へのポインター。
pHaltTF_HALTCOND*in移動に関する条件を格納する TF_HALTCOND 構造体へのポインター。このパラメーターは省略可能で、NULL を指定できます。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_FAIL
不特定のエラーが発生しました。
TF_E_NOLOCK
ec で識別される編集コンテキストが読み取り専用ロックを保持していません。

解説(Remarks)

範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。

このメソッドでは、アンカーをリージョンの境界を越えて移動することはできません。移動がリージョンの境界に達した場合、実際に移動した文字数は要求された数より少なくなります。隣接するリージョンへアンカーを移動するには ITfRange::ShiftStartRegion を使用します。

移動操作によって範囲の開始アンカーが終了アンカーを越えた場合、終了アンカーは開始アンカーと同じ位置に移動されます。

ITfRange::ShiftStart は時間のかかる操作になることがあります。パフォーマンスを向上させるため、可能な場合は ITfRange::ShiftStartToRange を使用してください。

vtbl 9 HRESULT ShiftEnd(DWORD ec, INT cchReq, INT* pcch, TF_HALTCOND* pHalt)

ITfRange::ShiftEnd メソッド

ecDWORDin編集コンテキストを識別する編集クッキーを指定します。これは ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。
cchReqINTin終了アンカーを移動する文字数を格納します。負の値を指定するとアンカーは後方へ、正の値を指定すると前方へ移動します。
pcchINT*outアンカーが実際に移動した文字数を受け取る LONG 値へのポインター。
pHaltTF_HALTCOND*in移動に関する条件を格納する TF_HALTCOND 構造体へのポインター。このパラメーターは省略可能で、NULL を指定できます。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
TF_E_NOLOCK
ec で識別される編集コンテキストが読み取り専用ロックを保持していません。

解説(Remarks)

範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。

このメソッドでは、アンカーをリージョンの境界を越えて移動することはできません。移動がリージョンの境界に達した場合、実際に移動した文字数は要求された数より少なくなります。隣接するリージョンへアンカーを移動するには ITfRange::ShiftEndRegion を使用します。

移動操作によって範囲の終了アンカーが開始アンカーを越えた場合、開始アンカーは終了アンカーと同じ位置に移動されます。

ITfRange::ShiftEnd は時間のかかる操作になることがあります。パフォーマンスを向上させるため、可能な場合は ITfRange::ShiftEndToRange を使用してください。

vtbl 10 HRESULT ShiftStartToRange(DWORD ec, ITfRange* pRange, TfAnchor aPos)

ITfRange::ShiftStartToRange メソッド

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。
pRangeITfRange*in開始アンカーの移動先となるアンカーを持つ ITfRange インターフェイスへのポインター。
aPosTfAnchorin開始アンカーを pRange のどのアンカーへ移動するかを指定する TfAnchor 値のいずれかを格納します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pRange が無効です。
E_FAIL
不特定のエラーが発生しました。
TF_E_NOLOCK
ec で識別される編集コンテキストが読み取り専用ロックを保持していません。

解説(Remarks)

範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。

移動操作によって範囲の開始アンカーが終了アンカーを越えた場合、終了アンカーは開始アンカーと同じ位置に移動されます。

このメソッドは ITfRange::ShiftStart よりも効率的であり、可能な場合はこちらを使用してください。

vtbl 11 HRESULT ShiftEndToRange(DWORD ec, ITfRange* pRange, TfAnchor aPos)

ITfRange::ShiftEndToRange メソッド

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。
pRangeITfRange*in終了アンカーの移動先となるアンカーを持つ ITfRange インターフェイスへのポインター。
aPosTfAnchorin終了アンカーを pRange のどのアンカーへ移動するかを指定する TfAnchor 値のいずれかを格納します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pRange が無効です。
E_FAIL
不特定のエラーが発生しました。
TF_E_NOLOCK
ec で識別される編集コンテキストが読み取り専用ロックを保持していません。

解説(Remarks)

範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。

移動操作によって範囲の終了アンカーが開始アンカーを越えた場合、開始アンカーは終了アンカーと同じ位置に移動されます。

このメソッドは ITfRange::ShiftEnd よりも効率的であり、こちらを使用してください。

vtbl 12 HRESULT ShiftStartRegion(DWORD ec, TfShiftDir dir, BOOL* pfNoRegion)

ITfRange::ShiftStartRegion メソッド

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。
dirTfShiftDirin開始アンカーを隣接するどのリージョンへ移動するかを指定する TfShiftDir 値のいずれかを格納します。
pfNoRegionBOOL*outアンカーが別のリージョンに隣接して配置されているかどうかを示すフラグを受け取る BOOL へのポインター。アンカーが別のリージョンに隣接していない場合は 0 以外の値、隣接している場合は 0 を受け取ります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pfNoRegion が無効です。
TF_E_NOLOCK
ec で識別される編集コンテキストが読み取り専用ロックを保持していません。

解説(Remarks)

範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。

このメソッドを呼び出す前に、アンカーが目的のリージョンに隣接して配置されている必要があります。隣接していない場合、pfNoRegion は 0 以外の値を受け取り、アンカーは移動しません。アンカーが目的のリージョンに隣接している場合、pfNoRegion は 0 を受け取り、アンカーはそのリージョンへ移動されます。

vtbl 13 HRESULT ShiftEndRegion(DWORD ec, TfShiftDir dir, BOOL* pfNoRegion)

ITfRange::ShiftEndRegion メソッド

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。
dirTfShiftDirin終了アンカーを隣接するどのリージョンへ移動するかを指定する TfShiftDir 値のいずれかを格納します。
pfNoRegionBOOL*outアンカーが別のリージョンに隣接して配置されているかどうかを示すフラグを受け取る BOOL 値へのポインター。アンカーが別のリージョンに隣接していない場合は 0 以外の値、隣接している場合は 0 を受け取ります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pfNoRegion が無効です。
TF_E_NOLOCK
ec で識別される編集コンテキストが読み取り専用ロックを保持していません。

解説(Remarks)

範囲 (レンジ) の開始位置と終了位置はアンカーと呼ばれます。

このメソッドを呼び出す前に、アンカーが目的のリージョンに隣接して配置されている必要があります。隣接していない場合、pfNoRegion は 0 以外の値を受け取り、アンカーは移動しません。アンカーが目的のリージョンに隣接している場合、pfNoRegion は 0 を受け取り、アンカーはそのリージョン内へ移動されます。

vtbl 14 HRESULT IsEmpty(DWORD ec, BOOL* pfEmpty)

ITfRange::IsEmpty メソッドは、開始アンカーと終了アンカーが同じ位置にあることによってテキスト範囲 (レンジ) が空であるかどうかを確認します。

ecDWORDin編集コンテキストを識別する編集クッキー。ITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得します。
pfEmptyBOOL*outブール値へのポインター。TRUE は範囲が空であること、FALSE は範囲が空でないことを示します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーです。
vtbl 15 HRESULT Collapse(DWORD ec, TfAnchor aPos)

ITfRange::Collapse メソッドは、開始アンカーと終了アンカーを同じ位置に移動することで、テキスト範囲 (レンジ) を空にします。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
aPosTfAnchorin

範囲をどのように折りたたむかを指定する TfAnchor 列挙体。

意味
TF_ANCHOR_START
終了アンカーが開始アンカーの位置へ移動されます。
TF_ANCHOR_END
開始アンカーが終了アンカーの位置へ移動されます。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
オブジェクトがインターフェイスをサポートしていないか、新しい範囲を作成できません。
E_INVALIDARG
aPos が無効です。
TF_E_NOLOCK
ec のクッキーが無効であるか、呼び出し元が読み取り専用ロックを保持していません。
vtbl 16 HRESULT IsEqualStart(DWORD ec, ITfRange* pWith, TfAnchor aPos, BOOL* pfEqual)

ITfRange::IsEqualStart メソッドは、このテキスト範囲 (レンジ) の開始アンカーが、指定された別の範囲のアンカーと一致するかどうかを確認します。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
pWithITfRange*inこの範囲の開始アンカーと比較するアンカーを持つ、指定された範囲へのポインター。
aPosTfAnchorin

指定された pWith 範囲のどのアンカーをこの範囲の開始アンカーと比較するかを示す列挙値。

意味
TF_ANCHOR_START
この範囲の開始アンカーを、指定された範囲の開始アンカーと比較します。
TF_ANCHOR_END
この範囲の開始アンカーを、指定された範囲の終了アンカーと比較します。
pfEqualBOOL*outブール値へのポインター。戻り時に TRUE は、指定された pWith 範囲のアンカーがこの範囲の開始アンカーと一致することを示します。FALSE は一致しないことを示します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。

解説(Remarks)

このメソッドは ITfRange::CompareStart と同一の機能を持ちますが、より効率的です。

vtbl 17 HRESULT IsEqualEnd(DWORD ec, ITfRange* pWith, TfAnchor aPos, BOOL* pfEqual)

ITfRange::IsEqualStart メソッドは、このテキスト範囲 (レンジ) の終了アンカーが、指定された別の範囲のアンカーと一致するかどうかを確認します。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
pWithITfRange*inこの範囲の終了アンカーと比較するアンカーを持つ、指定された範囲へのポインター。
aPosTfAnchorin

指定された pWith 範囲のどのアンカーをこの範囲の終了アンカーと比較するかを示す列挙値。

意味
TF_ANCHOR_START
この範囲の終了アンカーを、指定された範囲の開始アンカーと比較します。
TF_ANCHOR_END
この範囲の終了アンカーを、指定された範囲の終了アンカーと比較します。
pfEqualBOOL*outブール値へのポインター。戻り時に TRUE は、指定された pWith 範囲のアンカーがこの範囲の終了アンカーと一致することを示します。FALSE は一致しないことを示します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。

解説(Remarks)

このメソッドは、この範囲の終了アンカーを指定された別の範囲のアンカーと比較する点を除き、ITfRange::IsEqualStart と同一です。

このメソッドは ITfRange::CompareEnd と機能的に同等ですが、より効率的です。

vtbl 18 HRESULT CompareStart(DWORD ec, ITfRange* pWith, TfAnchor aPos, INT* plResult)

ITfRange::CompareStart メソッドは、このテキスト範囲 (レンジ) の開始アンカーの位置を、別の範囲のアンカーと比較します。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
pWithITfRange*inこの範囲の開始アンカーと比較するアンカーを持つ、指定された範囲へのポインター。
aPosTfAnchorin

指定された pWith 範囲のどのアンカーをこの範囲の開始アンカーと比較するかを示す列挙値。

意味
TF_ANCHOR_START
この範囲の開始アンカーを、指定された範囲の開始アンカーと比較します。
TF_ANCHOR_END
この範囲の開始アンカーを、指定された範囲の終了アンカーと比較します。
plResultINT*out

この範囲の開始アンカーと、指定された pWith 範囲のアンカーとの比較結果へのポインター。

意味
-1
この開始アンカーは、指定された範囲のアンカーより後方にあります (この開始アンカーの位置 < 指定された範囲のアンカーの位置)。
0
この開始アンカーは、指定された範囲のアンカーと同じ位置にあります。
+1
この開始アンカーは、指定された範囲のアンカーより前方にあります (この開始アンカーの位置 > 指定された範囲のアンカーの位置)。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。

解説(Remarks)

このメソッドは、2 つのアンカーが同一のリージョン内にある場合を除き、0 を返すことはありません。2 つのアンカーが同じ位置にあるかどうかだけを知りたい場合は、ITfRange::IsEqualStart の方が効率的です。

vtbl 19 HRESULT CompareEnd(DWORD ec, ITfRange* pWith, TfAnchor aPos, INT* plResult)

ITfRange::CompareEnd メソッドは、このテキスト範囲 (レンジ) の終了アンカーの位置を、別の範囲のアンカーと比較します。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
pWithITfRange*inこの範囲の終了アンカーと比較するアンカーを持つ、指定された範囲へのポインター。
aPosTfAnchorin

指定された pWith 範囲のどのアンカーをこの範囲の終了アンカーと比較するかを示す列挙値。

意味
TF_ANCHOR_START
この範囲の終了アンカーを、指定された範囲の開始アンカーと比較します。
TF_ANCHOR_END
この範囲の終了アンカーを、指定された範囲の終了アンカーと比較します。
plResultINT*out

この範囲の終了アンカーと、指定された pWith 範囲のアンカーとの比較結果へのポインター。

意味
-1
この終了アンカーは、指定された範囲のアンカーより後方にあります (この終了アンカーの位置 < 指定された範囲のアンカーの位置)。
0
この終了アンカーは、指定された範囲のアンカーと同じ位置にあります。
+1
この終了アンカーは、指定された範囲のアンカーより前方にあります (この終了アンカーの位置 > 指定された範囲のアンカーの位置)。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。

解説(Remarks)

このメソッドは、2 つのアンカーが同一のリージョン内にある場合を除き、0 を返すことはありません。2 つのアンカーが同じ位置にあるかどうかだけを知りたい場合は、ITfRange::IsEqualEnd の方が効率的です。

このメソッドは、この範囲の終了アンカーを指定された別の範囲のアンカーと比較する点を除き、ITfRange::CompareStart と同一です。

vtbl 20 HRESULT AdjustForInsert(DWORD ec, DWORD cchInsert, BOOL* pfInsertOk)

ITfRange::AdjustForInsert メソッドは、テキストの挿入に合わせてテキスト範囲 (レンジ) を拡張または縮小します。

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集クッキー。
cchInsertDWORDin挿入されるテキストの文字数。この文字数は、この後の ITfRange::SetText の呼び出しで使用されます。文字数が不明な場合は 0 を指定できます。
pfInsertOkBOOL*outコンテキストの所有者が挿入を受け入れる (TRUE) か拒否する (FALSE) かを示すフラグへのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
メソッドが失敗しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_NOTIMPL
アプリケーションは選択を置き換えることができませんでした。
TF_E_NOLOCK
ec パラメーターの値が無効なクッキーであるか、呼び出し元が読み取り専用ロックを保持していません。

解説(Remarks)

編集を開始する前に、新しいコンポジションを開始するための範囲を準備する目的でこのメソッドを使用してください。使用するのは、テキストが現在の選択位置に挿入されない場合に限ります。テキストを現在の選択位置に挿入する場合は、ITFInsertAtSelection:InsertTextAtSelection または ITfInsertAtSelection::InsertEmbeddedAtSelection を使用するのが適切です。

コンテキストの所有者は、動作を保持し一貫したユーザー体験を維持するためにこのメソッドを利用できます。たとえば、コンテキスト内の特定の文字やオブジェクトを変更から保護したり、上書き入力をサポートしたりできます。

既存のコンポジションを変更する場合、このメソッドは不要です。呼び出し元が以前に入力したテキストを変更するには、ITfRange::SetText を直接呼び出しても問題ありません。

戻り時に *pfInsertOkFALSE に設定されている場合、この範囲を用いた以降の ITfRange::SetText または ITfRange::InsertEmbedded の呼び出しは失敗する可能性が高くなります。それ以外の場合、*pfInsertOkTRUE に設定され、範囲の開始アンカーまたは終了アンカーはコンテキストの所有者の判断で再配置されることがあります。

vtbl 21 HRESULT GetGravity(TfGravity* pgStart, TfGravity* pgEnd)

ITfRange::GetGravity メソッド

pgStartTfGravity*out開始アンカーのグラビティを受け取る TfGravity 値へのポインター。
pgEndTfGravity*out終了アンカーのグラビティを受け取る TfGravity 値へのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
vtbl 22 HRESULT SetGravity(DWORD ec, TfGravity gStart, TfGravity gEnd)

ITfRange::SetGravity メソッド

ecDWORDinITfDocumentMgr::CreateContext または ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを格納します。
gStartTfGravityin開始アンカーのグラビティを指定する TfGravity 値のいずれかを格納します。
gEndTfGravityin終了アンカーのグラビティを指定する TfGravity 値のいずれかを格納します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_FAIL
不特定のエラーが発生しました。
TF_E_NOLOCK
ec のクッキーが無効です。
vtbl 23 HRESULT Clone(ITfRange** ppClone)

ITfRange::Clone メソッドは、このテキスト範囲 (レンジ) を複製します。

ppCloneITfRange**outこの範囲を参照する新しい範囲オブジェクトへのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_OUTOFMEMORY
メソッドは新しい範囲へのポインターを生成できませんでした。

解説(Remarks)

生成された新しい範囲オブジェクトは、元の範囲に影響を与えずに変更できます。ただし、新しい範囲を含むドキュメントを変更すると、元の範囲のアンカーが再配置される場合があります。

元の範囲のグラビティは、新しい範囲にも引き継がれます。

vtbl 24 HRESULT GetContext(ITfContext** ppContext)

ITfRange::GetContext メソッド

ppContextITfContext**outこの範囲が属するコンテキストオブジェクトを受け取る ITfContext インターフェイスポインターへのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppContext が無効です。
E_FAIL
不特定のエラーが発生しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ITfRange "{AA80E7FF-2021-11D2-93E0-0060B067B86E}"
#usecom global ITfRange IID_ITfRange "{}"
#comfunc global ITfRange_GetText            3 int,int,var,int,var
#comfunc global ITfRange_SetText            4 int,int,wstr,int
#comfunc global ITfRange_GetFormattedText   5 int,sptr
#comfunc global ITfRange_GetEmbedded        6 int,var,var,sptr
#comfunc global ITfRange_InsertEmbedded     7 int,int,sptr
#comfunc global ITfRange_ShiftStart         8 int,int,var,var
#comfunc global ITfRange_ShiftEnd           9 int,int,var,var
#comfunc global ITfRange_ShiftStartToRange  10 int,sptr,int
#comfunc global ITfRange_ShiftEndToRange    11 int,sptr,int
#comfunc global ITfRange_ShiftStartRegion   12 int,int,var
#comfunc global ITfRange_ShiftEndRegion     13 int,int,var
#comfunc global ITfRange_IsEmpty            14 int,var
#comfunc global ITfRange_Collapse           15 int,int
#comfunc global ITfRange_IsEqualStart       16 int,sptr,int,var
#comfunc global ITfRange_IsEqualEnd         17 int,sptr,int,var
#comfunc global ITfRange_CompareStart       18 int,sptr,int,var
#comfunc global ITfRange_CompareEnd         19 int,sptr,int,var
#comfunc global ITfRange_AdjustForInsert    20 int,int,var
#comfunc global ITfRange_GetGravity         21 var,var
#comfunc global ITfRange_SetGravity         22 int,int,int
#comfunc global ITfRange_Clone              23 sptr
#comfunc global ITfRange_GetContext         24 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。