ITfContextOwnerServices
COM公式ドキュメント
ITfContextOwnerServices インターフェイスはマネージャーによって実装され、コンテキストの所有者として動作するテキストサービスまたはアプリケーションから使用されます。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITfContextOwnerServices::OnLayoutChange メソッドは、コンポジション中にテキストストリームの画面上の表示が更新されたときに、コンテキストの所有者から呼び出されます。
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
ITfContextOwnerServices::OnLayoutChange の呼び出しは、テキストの編集、フォントサイズの変更、ウィンドウの移動やサイズ変更などに応じて行われることがあります。
アプリケーションが画面レイアウトを計算していないために ITfContextView::GetTextExt または ITfContextOwner::GetACPFromPoint の呼び出しが失敗した場合 (戻り値: TS_E_NOLAYOUT)、アプリケーションは情報が用意でき次第 ITfContextOwnerServices::OnLayoutChange を呼び出す必要があります。
ITfContextOwnerServices::OnStatusChange メソッドは、ITfContextOwner::GetStatus メソッドが返す TS_STATUS 構造体の dwDynamicFlags メンバーが変更されたときに、コンテキストの所有者から呼び出されます。
| dwFlags | DWORD | in | 動的ステータスフラグを指定します。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
ITfContextOwnerServices::OnAttributeChange メソッド
| rguidAttribute | GUID* | in | サポート属性の GUID を指定します。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
サポート属性は、コンテキストの所有者が管理する読み取り専用のプロパティです。サポートされる属性は Tsattrs.h ヘッダーファイルに定義されています。
ITfContextOwnerServices::Serialize メソッドは、テキストの範囲 (レンジ) からプロパティを取得し、そのプロパティのデータをストリームオブジェクトに書き込みます。これにより、アプリケーションはプロパティのデータを (たとえばファイルに書き出すなどして) 保存できます。
| pProp | ITfProperty* | in | シリアル化するプロパティを識別する ITfProperty インターフェイスへのポインター。 |
| pRange | ITfRange* | in | プロパティの取得元となる範囲 (レンジ) を識別する ITfRange インターフェイスへのポインター。 |
| pHdr | TF_PERSISTENT_PROPERTY_HEADER_ACP* | out | プロパティのヘッダーデータを受け取る TF_PERSISTENT_PROPERTY_HEADER_ACP 構造体へのポインター。 |
| pStream | IStream* | in | TSF マネージャーがプロパティのデータを書き込む IStream オブジェクトへのポインター。 |
戻り値
解説(Remarks)
pHdr に格納されるプロパティヘッダーのデータはすべてのプロパティに共通のもので、pStream に書き込まれたデータとともに保持する必要があります。プロパティのデータを復元するには、この 2 つを対にして ITfContextOwnerServices::Unserialize に渡す必要があります。
アプリケーションは、次の手順によってドキュメント全体のすべてのプロパティを保存できます。
- ITfContext::EnumProperties を使用してすべてのプロパティを列挙します。
- 各プロパティ内で、ITfReadOnlyProperty::EnumRanges を使用して範囲 (レンジ) を列挙します。
- 現在のプロパティと範囲をこのメソッドに渡します。
- pHdr に格納されたデータをファイルに書き込みます。
- pStream に追加されたデータをファイルに書き込みます。
ITfContextOwnerServices::Unserialize メソッド
| pProp | ITfProperty* | in | プロパティのデータを受け取る ITfProperty オブジェクトへのポインター。 |
| pHdr | TF_PERSISTENT_PROPERTY_HEADER_ACP* | in | プロパティのヘッダーデータを格納する TF_PERSISTENT_PROPERTY_HEADER_ACP 構造体へのポインター。 |
| pStream | IStream* | in | プロパティのデータを格納する IStream オブジェクトへのポインター。pLoader が NULL でない場合、このパラメーターは NULL にできます。pLoader が NULL でない場合、このパラメーターは無視されます。 |
| pLoader | ITfPersistentPropertyLoaderACP* | in | TSF マネージャーがプロパティのデータを取得するために使用する ITfPersistentPropertyLoaderACP オブジェクトへのポインター。pStream が NULL でない場合、このパラメーターは NULL にできます。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| プロパティのデータは非同期に取得されます。 | |
| 同期的な読み取り専用ロックを取得できません。 | |
| 不特定のエラーが発生しました。 |
解説(Remarks)
pLoader ではなく pStream が指定された場合、プロパティのデータはこのメソッドの呼び出し中に pStream から読み取られます。pStream ではなく pLoader が指定された場合、プロパティのデータは pLoader から非同期に読み取られます。プロパティのデータが大きい場合、pStream を使用すると長い遅延が発生することがあります。
このメソッドを呼び出すとき、アプリケーションは同期的な読み取り専用ロックを許可できる状態でなければなりません。
ITfContextOwnerServices::ForceLoadProperty メソッド
| pProp | ITfProperty* | in | 読み込むプロパティを指定する ITfProperty オブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メモリの割り当てエラーが発生しました。 | |
| 不特定のエラーが発生しました。 |
解説(Remarks)
このメソッドを呼び出す前に、アプリケーションは同期的な読み取り専用ロックを許可できる状態でなければなりません。
ITfContextOwnerServices::CreateRange メソッドは、指定された文字位置に基づいて新しい範囲 (レンジ) を作成します。
| acpStart | INT | in | 範囲の開始文字位置を指定します。 |
| acpEnd | INT | in | 範囲の終了文字位置を指定します。 |
| ppRange | ITfRangeACP** | out | 指定された開始文字位置と終了文字位置の範囲を表す range オブジェクトへのポインターを受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 指定された範囲が NULL であるか、指定された開始文字位置が 0 未満であるか、指定された開始文字位置が指定された終了文字位置より大きい値です。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITfContextOwnerServices "{B23EB630-3E1C-11D3-A745-0050040AB407}" #usecom global ITfContextOwnerServices IID_ITfContextOwnerServices "{}" #comfunc global ITfContextOwnerServices_OnLayoutChange 3 #comfunc global ITfContextOwnerServices_OnStatusChange 4 int #comfunc global ITfContextOwnerServices_OnAttributeChange 5 var #comfunc global ITfContextOwnerServices_Serialize 6 sptr,sptr,var,sptr #comfunc global ITfContextOwnerServices_Unserialize 7 sptr,var,sptr,sptr #comfunc global ITfContextOwnerServices_ForceLoadProperty 8 sptr #comfunc global ITfContextOwnerServices_CreateRange 9 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITfContextOwnerServices "{B23EB630-3E1C-11D3-A745-0050040AB407}" #usecom global ITfContextOwnerServices IID_ITfContextOwnerServices "{}" #comfunc global ITfContextOwnerServices_OnLayoutChange 3 #comfunc global ITfContextOwnerServices_OnStatusChange 4 int #comfunc global ITfContextOwnerServices_OnAttributeChange 5 sptr #comfunc global ITfContextOwnerServices_Serialize 6 sptr,sptr,sptr,sptr #comfunc global ITfContextOwnerServices_Unserialize 7 sptr,sptr,sptr,sptr #comfunc global ITfContextOwnerServices_ForceLoadProperty 8 sptr #comfunc global ITfContextOwnerServices_CreateRange 9 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。