ITfComposition
COM公式ドキュメント
ITfComposition インターフェイスは TSF マネージャーによって実装され、テキストサービスがコンポジション (変換中の文字列) に関する情報を取得したり、コンポジションを終了したりするために使用します。このインターフェイスのインスタンスは ITfContextComposition::StartComposition メソッドによって提供されます。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITfComposition::GetRange メソッド
| ppRange | ITfRange** | out | 範囲 (レンジ) オブジェクトを受け取る ITfRange インターフェイスポインターへのポインター。範囲の長さが 0 になる場合もあります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| ppRange が無効です。 | |
| メモリの割り当てに失敗しました。 | |
| コンポジションは既に終了しています。 |
ITfComposition::ShiftStart メソッド
| ecWrite | DWORD | in | ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを指定します。 |
| pNewStart | ITfRange* | in | 新しい開始アンカーの位置を含む ITfRange オブジェクトへのポインター。コンテキストの開始アンカーは、この範囲の開始アンカーの位置へ移動します。この範囲の開始アンカーがコンポジションの終了アンカーより後ろに位置する場合、このメソッドは失敗します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| pNewStart の開始アンカーがコンポジションの終了アンカーより後ろに位置しているか、pNewStart が無効です。 | |
| コンポジションは既に終了しています。 | |
| ecWrite で識別される編集コンテキストが読み取り/書き込みロックを保持していません。 |
解説(Remarks)
このメソッドを呼び出すと、コンポジションから除外されたテキストからは GUID_PROP_COMPOSING プロパティが削除されます。同様に、コンポジションに追加されたテキストには GUID_PROP_COMPOSING プロパティが追加されます。
ITfComposition::ShiftEnd メソッド
| ecWrite | DWORD | in | ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを指定します。 |
| pNewEnd | ITfRange* | in | 新しい終了アンカーの位置を含む ITfRange オブジェクトへのポインター。コンテキストの終了アンカーは、この範囲の終了アンカーの位置へ移動します。この範囲の終了アンカーがコンポジションの開始アンカーより前に位置する場合、このメソッドは失敗します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| pNewEnd の終了アンカーがコンポジションの開始アンカーより前に位置しているか、pNewStart が無効です。 | |
| コンポジションは既に終了しています。 | |
| ecWrite で識別される編集コンテキストが読み取り/書き込みロックを保持していません。 |
解説(Remarks)
このメソッドを呼び出すと、コンポジションから除外されたテキストからは GUID_PROP_COMPOSING プロパティが削除されます。同様に、コンポジションに追加されたテキストには GUID_PROP_COMPOSING プロパティが追加されます。
ITfComposition::EndComposition メソッド
| ecWrite | DWORD | in | ITfEditSession::DoEditSession から取得した編集コンテキストを識別する編集クッキーを指定します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
この値は次の場合に返されます。
|
|
| ecWrite で識別される編集コンテキストが読み取り/書き込みロックを保持していません。 |
解説(Remarks)
このメソッドはコンポジションオブジェクトを解放しませんが、このメソッドの呼び出し後、ITfComposition の各メソッドは E_UNEXPECTED で失敗するようになります。
コンテキストの所有者は、コンポジションを終了させるために ITFContextOwnerCompositionServices::TerminateComposition メソッドを使用してください。
このメソッドを呼び出すと、コンポジションが対象とするテキストから GUID_PROP_COMPOSING プロパティが削除されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITfComposition "{20168D64-5A8F-4A5A-B7BD-CFA29F4D0FD9}"
#usecom global ITfComposition IID_ITfComposition "{}"
#comfunc global ITfComposition_GetRange 3 sptr
#comfunc global ITfComposition_ShiftStart 4 int,sptr
#comfunc global ITfComposition_ShiftEnd 5 int,sptr
#comfunc global ITfComposition_EndComposition 6 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。