ITextStoreAnchorSink
COM公式ドキュメント
ITextStoreAnchorSink インターフェイスは TSF マネージャーによって実装され、アンカーベースのアプリケーションが特定のイベントの発生をマネージャーに通知するために使用します。マネージャーは ITextStoreAnchor::AdviseSink を呼び出してこのアドバイズシンクをインストールします。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITextStoreAnchorSink::OnTextChange メソッド
| dwFlags | TEXT_STORE_CHANGE_FLAGS | in | テキストの変更に関する追加情報を指定するフラグのセットを格納します。次の値のうち 1 つ以上を指定できます。
| ||||||
| paStart | IAnchor* | in | 変更されたテキストの先頭に位置するアンカーへのポインター。 | ||||||
| paEnd | IAnchor* | in | 変更されたテキストの末尾に位置するアンカーへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 変更を保持するための複製アンカーを作成できませんでした。 | |
| paStart または paEnd が無効です。 | |
| メモリの割り当てに失敗しました。 | |
| TSF マネージャーがドキュメントのロックを保持しています。これは通常、ITextStoreAnchor::SetText などの別の ITextStoreAnchor メソッドの内部からこのメソッドが呼び出されたことを示します。 |
解説(Remarks)
このメソッドは、アプリケーションが自身のテキストを変更した場合にのみ呼び出されます。クライアントが ITextStoreAnchor::SetText や ITextStoreAnchor::InsertTextAtSelection などの ITextStoreAnchor メソッドでテキストを変更した場合には呼び出されません。
このメソッドを呼び出す際、アプリケーションはドキュメントロックを許可できる状態でなければなりません。
ITextStoreAnchorSink::OnSelectionChange メソッドは、テキストストリーム内の選択範囲が変更されたときに呼び出されます。このメソッドは、ITextStoreAnchor::GetSelection を呼び出した場合の戻り値が変化したときに必ず呼び出す必要があります。
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| マネージャーがドキュメントのロックを保持しています。 |
解説(Remarks)
このメソッドは、アプリケーション自身が選択範囲を変更した場合にのみ呼び出す必要があります。クライアントが ITextStoreAnchor::SetSelection、ITextStoreAnchor::InsertTextAtSelection、あるいはその他の ITextStoreAnchor メソッドで選択範囲を変更した場合には呼び出す必要はありません。
このメソッドを呼び出す際、アプリケーションはドキュメントロックを許可できる状態でなければなりません。
アプリケーションは、このメソッドの内部からクライアントによる ITextStoreAnchor::RequestLock への再入呼び出しが行われることを想定しておく必要があります。アプリケーションはロック要求を同期的に許可することも、複数の変更がキャッシュされている場合には非同期に許可することもできます。
ITextStoreAnchorSink::OnLayoutChange メソッドは、ドキュメントのレイアウト (画面上の表現) が変更されたときに呼び出されます。
| lcode | TsLayoutCode | in | 変更の種類を定義する TsLayoutCode 値を格納します。 |
| vcView | DWORD | in | ドキュメントを識別するアプリケーション定義のクッキーを格納します。詳細については、ITextStoreAnchor::GetActiveView を参照してください。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
レイアウトの変更は、テキストの変更、フォントサイズの変更、ウィンドウの移動、ウィンドウのサイズ変更、その他表示されるテキストに影響する変更に応じて発生します。
アプリケーションがレイアウトを計算していないために ITextStoreAnchor::GetTextExt または ITextStoreAnchor::GetAnchorFromPoint の呼び出しが TS_E_NOLAYOUT を返した場合、アプリケーションはレイアウトが利用可能になった時点で ITextStoreAnchorSink::OnLayoutChange を呼び出す必要があります。
ITextStoreAnchorSink::OnStatusChange メソッド
| dwFlags | DWORD | in | 新しいステータスを指定する値を格納します。指定可能な値の詳細については、TS_STATUS 構造体の dwDynamicFlags メンバーを参照してください。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
アプリケーションは、ITextStoreAnchor::GetStatus が TS_STATUS の dwDynamicFlags メンバーについて新しい値を返すようになったときには、必ずこのメソッドを呼び出す必要があります。
ITextStoreAnchorSink::OnAttrsChange メソッドは、1 つ以上のテキスト属性の値が変更されたときに呼び出されます。
| paStart | IAnchor* | in | 属性が変更されたテキスト範囲の開始アンカーへのポインター。 |
| paEnd | IAnchor* | in | 属性が変更されたテキスト範囲の終了アンカーへのポインター。 |
| cAttrs | DWORD | in | paAttrs 配列内の属性の数を指定します。 |
| paAttrs | GUID* | in | 変更された属性を識別する TS_ATTRID 値の配列へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 |
ITextStoreAnchorSink::OnLockGranted メソッド
| dwLockFlags | TEXT_STORE_LOCK_FLAGS | in | 要求されたロックの種類やその他のロック要求データを示すフラグのセットを格納します。次のいずれかの値を指定できます。
|
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| dwLockFlags が無効です。 | |
| 誤った種類のロックが許可されました。 |
解説(Remarks)
ドキュメントロックは ITextStoreAnchor::RequestLock を呼び出して要求します。アプリケーションは、要求されたロックの種類を指定して ITextStoreAnchorSink::OnLockGranted を呼び出すことでロック要求を許可します。ロックは OnLockGranted の呼び出し中のみ有効です。OnLockGranted から戻ると、ドキュメントはロック解除されたとみなされます。
dwLockFlags で指定するロックの種類は、対応する ITextStoreAnchor::RequestLock の呼び出しで要求されたロックの種類と一致していなければなりません。
OnLockGranted の内部から ITextStoreAnchor::RequestLock を呼び出すとエラー値が返されます。
アプリケーションは、OnLockGranted のコンテキスト内から ITextStoreAnchorSink のいずれのメソッドも呼び出してはなりません。
ITextStoreAnchor::RequestLock の内部から同期的なロック要求が行われた場合、呼び出し元は ITextStoreAnchor::RequestLock の戻り値も提供する必要があります。
ITextStoreAnchorSink::OnStartEditTransaction メソッド
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは、インストールされているすべての編集トランザクションシンクに対して呼び出されます。
編集トランザクションとは、一度に処理すべきテキスト変更のグループです。このメソッドを呼び出すことで、テキストサービスは ITextStoreAnchorSink::OnEndEditTransaction が呼び出されるまで、以降の変更をキューに蓄積できます。ITextStoreAnchorSink::OnEndEditTransaction が呼び出されると、テキストサービスはキューに蓄積されたすべての変更を処理します。
編集トランザクションの使用は任意です。
ITextStoreAnchorSink::OnEndEditTransaction メソッド
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 編集トランザクションの参照カウントが正しくありません。 |
解説(Remarks)
このメソッドは、インストールされているすべての編集トランザクションシンクに対して ITfEditTransactionSink::OnEndEditTransaction メソッドを呼び出させます。
編集トランザクションとは、一度に処理すべきテキスト変更のグループです。ITextStoreAnchorSink::OnStartEditTransaction を呼び出すことで、テキストサービスは ITextStoreAnchorSink::OnEndEditTransaction が呼び出されるまで、以降の変更をキューに蓄積できます。ITextStoreAnchorSink::OnEndEditTransaction が呼び出されると、テキストサービスはキューに蓄積されたすべての変更を処理します。
編集トランザクションの使用は任意です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITextStoreAnchorSink "{AA80E905-2021-11D2-93E0-0060B067B86E}" #usecom global ITextStoreAnchorSink IID_ITextStoreAnchorSink "{}" #comfunc global ITextStoreAnchorSink_OnTextChange 3 int,sptr,sptr #comfunc global ITextStoreAnchorSink_OnSelectionChange 4 #comfunc global ITextStoreAnchorSink_OnLayoutChange 5 int,int #comfunc global ITextStoreAnchorSink_OnStatusChange 6 int #comfunc global ITextStoreAnchorSink_OnAttrsChange 7 sptr,sptr,int,var #comfunc global ITextStoreAnchorSink_OnLockGranted 8 int #comfunc global ITextStoreAnchorSink_OnStartEditTransaction 9 #comfunc global ITextStoreAnchorSink_OnEndEditTransaction 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITextStoreAnchorSink "{AA80E905-2021-11D2-93E0-0060B067B86E}" #usecom global ITextStoreAnchorSink IID_ITextStoreAnchorSink "{}" #comfunc global ITextStoreAnchorSink_OnTextChange 3 int,sptr,sptr #comfunc global ITextStoreAnchorSink_OnSelectionChange 4 #comfunc global ITextStoreAnchorSink_OnLayoutChange 5 int,int #comfunc global ITextStoreAnchorSink_OnStatusChange 6 int #comfunc global ITextStoreAnchorSink_OnAttrsChange 7 sptr,sptr,int,sptr #comfunc global ITextStoreAnchorSink_OnLockGranted 8 int #comfunc global ITextStoreAnchorSink_OnStartEditTransaction 9 #comfunc global ITextStoreAnchorSink_OnEndEditTransaction 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。