ITextStoreAnchor
COM公式ドキュメント
ITextStoreAnchor インターフェイスは Microsoft Active Accessibility クライアントによって実装され、TSF マネージャーがテキストストリームを操作するために使用します。
メソッド 27
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITextStoreAnchor::AdviseSink メソッドは、ITextStoreAnchorSink インターフェイスの新しいアドバイズシンクをインストールするか、既存のアドバイズシンクを変更します。
| riid | GUID* | in | シンクのインターフェイスを指定します。サポートされる値は IID_ITextStoreAnchorSink のみです。 |
| punk | IUnknown* | in | アドバイズ対象のシンクインターフェイスへのポインター。NULL にはできません。 |
| dwMask | DWORD | in | アドバイズシンクに通知するイベントを指定します。指定可能な値の詳細については、TS_AS_* 定数を参照してください。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 指定されたシンクインターフェイス riid を取得できませんでした。 | |
| 指定されたシンクインターフェイスはサポートされていません。 | |
| 指定されたシンクオブジェクトを取得できませんでした。 |
解説(Remarks)
punk パラメーターで表される同じインターフェイスに対する 2 回目以降の呼び出しは、dwMask パラメーターの更新要求として処理されます。サーバーは、このような要求に応じてシンクに対して AddRef メソッドを呼び出してはなりません。
サーバーが保持する接続ポイントは 1 つだけです。元のシンクオブジェクトが解除されるまで、2 つ目のシンクオブジェクトをアドバイズしようとしても失敗します。通知が不要になった場合、アプリケーションは ITextStoreAnchor::UnadviseSink メソッドを使用してシンクオブジェクトの登録を解除してください。
ITextStoreAnchor::UnadviseSink メソッド
| punk | IUnknown* | in | シンクオブジェクトへのポインター。NULL にはできません。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| アクティブなシンクオブジェクトがありません。 |
解説(Remarks)
新しいシンクオブジェクトを登録する ITextStoreAnchor::AdviseSink メソッドの呼び出しごとに、このメソッドの呼び出しを対応させる必要があります。AdviseSink が、既に登録済みのシンクの dwMask パラメーターを更新しただけの場合は、UnadviseSink の呼び出しは不要です。
たとえば、シンクオブジェクトを登録するために、アプリケーションは最初に AdviseSink メソッドを呼び出します。その後、同じシンクオブジェクトを指定して AdviseSink メソッドを再度呼び出し、dwMask パラメーターを変更できます。シンクオブジェクトの登録を解除するには、UnadviseSink メソッドを呼び出します。
punk パラメーターは、AdviseSink メソッドに最初に渡したポインターと同一の COM アイデンティティを持つ必要があります。
ITextStoreAnchor::RequestLock メソッド
| dwLockFlags | DWORD | in | 要求するロックの種類を指定します。
| ||||||||
| phrSession | HRESULT* | out | ロック要求が同期の場合、ロック要求の結果を示す ITextStoreAnchorSink::OnLockGranted メソッドからの HRESULT 値を受け取ります。 ロック要求が非同期で結果が TS_S_ASYNC の場合、ドキュメントは非同期ロックを取得します。ロック要求が非同期で結果が TS_E_SYNCHRONOUS の場合、ドキュメントを同期的にロックすることはできません。 |
戻り値
解説(Remarks)
このメソッドは ITextStoreAnchorSink::OnLockGranted メソッドを使用してドキュメントをロックします。アプリケーションは、ITextStoreAnchor::RequestLock メソッドの内部でドキュメントを変更したり、ITextStoreAnchorSink::OnTextChange メソッドで変更通知を送信したりしてはなりません。報告すべき変更が保留中の場合、アプリケーションは非同期のロック要求にのみ応答できます。
アプリケーションは、複数の ITextStoreAnchor::RequestLock メソッド呼び出しをキューに入れようとしないでください。必要なコールバックは 1 回だけだからです。ただし、呼び出し側が複数の読み取り要求と 1 つ以上の書き込み要求を行った場合、コールバックは書き込みアクセス用にする必要があります。
同期ロックの要求が成功した場合、その要求は非同期ロックの要求に優先します。同期ロックの要求が失敗した場合は、非同期ロックの要求に優先しません。実装側は、未処理の非同期要求が存在する場合、その要求を引き続き処理する必要があります。
ITextStoreAnchor::RequestLock メソッドが返る前にロックが許可された場合、phrSession パラメーターは ITextStoreAnchorSink::OnLockGranted メソッドが返した HRESULT を受け取ります。呼び出しは成功したものの、ロックが後で許可される場合、phrSession パラメーターは TS_S_ASYNC フラグを受け取ります。ITextStoreAnchor::RequestLock が S_OK 以外を返した場合、phrSession パラメーターは無視してください。
呼び出し側は、このメソッドを再入的に呼び出してはなりません。ただし、呼び出し側が読み取り専用ロックを保持している場合は例外です。この場合、非同期の書き込みロックを要求するために再入的に呼び出すことができます。書き込みロックは、読み取り専用ロックが終了した後で許可されます。
ドキュメントのロックの詳細については、Document Locks を参照してください。
ITextStoreAnchor::GetStatus メソッドは、ドキュメントの状態を取得します。ドキュメントの状態は TS_STATUS 構造体として返されます。
| pdcs | TS_STATUS* | out | ドキュメントの状態を格納する TS_STATUS 構造体を受け取ります。NULL にはできません。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| TS_STATUS パラメーターへのポインターが無効です。 |
ITextStoreAnchor::QueryInsert メソッドは、指定された開始アンカーと終了アンカーが有効かどうかを判定します。ドキュメントへの編集を実行する前に、その編集内容を調整するためにこのメソッドを使用します。このメソッドは、ドキュメントの範囲外の値を返してはなりません。
| paTestStart | IAnchor* | in | 挿入するテキストの開始アンカーへのポインターを受け取ります。 |
| paTestEnd | IAnchor* | in | 挿入するテキストの終了アンカーへのポインターを受け取ります。選択テキストを置き換えるのではなく、ある位置にテキストを挿入する場合は、paTestStart と同じになります。 |
| cch | DWORD | in | 置換テキストの長さ。 |
| ppaResultStart | IAnchor** | out | 挿入されるテキストの開始位置にある新しいアンカーオブジェクトへのポインター。このパラメーターの値が NULL の場合、指定された位置にテキストを挿入することはできません。このアンカーはドキュメントの外部に置くことはできません。 |
| ppaResultEnd | IAnchor** | out | 挿入されるテキストの終了位置にある新しいアンカーオブジェクトへのポインター。このパラメーターの値が NULL の場合、指定された位置にテキストを挿入することはできません。このアンカーはドキュメントの外部に置くことはできません。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 原因不明のエラーが発生しました。 | |
| paTestStart または paTestEnd パラメーターが無効です。 | |
| ppaResultStart または ppaResultEnd のアンカーの生成に失敗しました。 |
解説(Remarks)
ppaResultStart と ppaResultEnd の値は、アプリケーションがドキュメントにテキストを挿入する方法によって異なります。ppaResultStart と ppaResultEnd が paTestStart と同じ場合、挿入後のカーソルは挿入されたテキストの先頭に位置します。ppaResultStart と ppaResultEnd が paTextEnd と同じ場合、挿入後のカーソルは挿入されたテキストの末尾に位置します。
ITextStoreAnchor::GetSelection メソッドは、テキストストリーム内の選択テキストのオフセットを返します。このメソッドは複数のテキスト選択をサポートします。呼び出し側は、このメソッドを呼び出す前にドキュメントの読み取り専用ロックを取得しておく必要があります。
| ulIndex | DWORD | in | 処理を開始するテキスト選択を指定します。このパラメーターに TF_DEFAULT_SELECTION 定数を指定すると、入力用の選択から処理が開始され、単一の選択(入力操作に適した選択)のみが返されます。 |
| ulCount | DWORD | in | 返す選択の最大数を指定します。 |
| pSelection | TS_SELECTION_ANCHOR* | out | 選択テキストのスタイル、開始文字位置、終了文字位置を受け取ります。これらの値は TS_SELECTION_ANCHOR 構造体に格納されます。 |
| pcFetched | DWORD* | out | 返された pSelection 構造体の数を受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 開始アンカーまたは終了アンカーを TS_SELECTION_ANCHOR 構造体に格納できませんでした。 | |
| 選択用のメモリを割り当てられませんでした。 | |
| 呼び出し側がドキュメントの読み取り専用ロックを保持していません。 | |
| ドキュメントに選択がありません。 |
ITextStoreAnchor::SetSelection メソッド
| ulCount | DWORD | in | pSelection 内のテキスト選択の数を指定します。 |
| pSelection | TS_SELECTION_ANCHOR* | in | TS_SELECTION_ANCHOR 構造体を通じて選択されたテキストのスタイル、開始文字位置、終了文字位置を指定します。構造体の開始アンカーメンバー paStart は、終了アンカーメンバー paEnd より後ろに位置してはなりません(同じ位置にあることは許容されます)。 paStart = paEnd の場合、このメソッドはそのアンカー位置にキャレットを配置します。テキストストリーム内に同時に存在できるキャレットは 1 つだけです。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 原因不明のエラーが発生しました。 | |
| 処理を完了するのに十分なメモリを割り当てられませんでした。 | |
| 指定されたアンカー位置がドキュメント内のテキストの範囲を超えています。 | |
| 呼び出し側が読み取り/書き込みロックを保持していません。 |
ITextStoreAnchor::GetText メソッドは、指定されたアンカー位置のテキストに関する情報を返します。このメソッドは表示テキストと非表示テキストを返し、埋め込みデータがテキストに付随しているかどうかを示します。
| dwFlags | DWORD | in | 使用しません。0 を指定してください。 |
| paStart | IAnchor* | in | 開始アンカー位置を指定します。 |
| paEnd | IAnchor* | in | 終了アンカー位置を指定します。NULL の場合、テキストストリームの最後尾に位置するアンカーとして扱われます。 |
| pchText | LPWSTR | out | テキストを受け取るバッファーを指定します。cchReq = 0 の場合に限り NULL にできます。 |
| cchReq | DWORD | in | pchText バッファーのサイズを文字数で指定します。 |
| pcch | DWORD* | out | pchText バッファーにコピーされた文字数を受け取ります。 |
| fUpdateAnchor | BOOL | in | TRUE の場合、paStart は pchText にコピーされた最後の文字の直後に再配置されます。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| paStart または paEnd の有効なインターフェイスポインターを取得できませんでした。 | |
| paStart または paEnd のアンカーがドキュメントのテキストの外部にあります。 | |
| 呼び出し側がドキュメントの読み取り専用ロックを保持していません。 |
解説(Remarks)
このメソッドを使用する呼び出し側は、ITextStoreAnchor::RequestLock メソッドを呼び出してドキュメントの読み取り専用ロックを取得しておく必要があります。読み取り専用ロックがない場合、このメソッドは失敗し TF_E_NOLOCK を返します。
アプリケーションは、内部的な理由によりメソッドの戻り値を切り詰めることがあります。
複数回の GetText 呼び出しでテキストを高速に走査するには、呼び出し側は fUpdateAnchor = TRUE を使用します。
paStart と paEnd の間の文字数が cchReq より少ない場合、実際にコピーされる文字数は cchReq より少なくなることがあります。
GetText の動作は、返されるテキストが含むリージョン境界の影響を受けません。
ITextStoreAnchor::SetText メソッドは、指定された 2 つのアンカー位置の間のテキスト選択を設定します。
| dwFlags | DWORD | in | TS_ST_CORRECTION が設定されている場合、テキストは既存の内容に対する変換(修正)であり、.wav ファイルデータや言語識別子などの特別なテキストマークアップ情報(メタデータ)が保持されます。保持するマークアップ情報の種類はクライアントが定義します。 |
| paStart | IAnchor* | in | 置き換えるテキスト範囲の先頭にあるアンカーへのポインター。 |
| paEnd | IAnchor* | in | 置き換えるテキスト範囲の末尾にあるアンカーへのポインター。常に paStart と同じ位置か、それより後ろに位置する必要があります。 |
| pchText | LPWSTR | in | 置換テキストへのポインター。文字数は cch パラメーターで指定されるため、テキスト文字列は NULL 終端である必要はありません。 |
| cch | DWORD | in | 置換テキストの文字数を指定します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| アンカー paStart または paEnd のいずれかを生成できませんでした。 | |
| paStart または paEnd の位置がドキュメントのテキストの外部にあります。 | |
| 呼び出し側が読み取り/書き込みロックを保持していません。 | |
| ドキュメントは読み取り専用です。内容を変更できません。 | |
|
リージョン境界をまたいでテキストを変更しようとしました。 |
解説(Remarks)
アプリケーションは、まず ITextStoreAnchor::InsertTextAtSelection を使用してコンポジション(変換中の文字列)を開始してください。ITextStoreAnchor::SetText は、既存のコンポジション内でのみ使用してください。SetText を呼び出した時点でアクティブなコンポジションが存在しない場合、TSF マネージャーは SetText の呼び出しを包含するだけの短命なコンポジションを作成します。
呼び出し側は、ITextStoreAnchor::RequestLock で取得した書き込みロックを保持している必要があります。保持していない場合、ITextStoreAnchor::SetText は TS_E_NOLOCK で失敗します。
paStart が paEnd と同じ位置にある場合、操作は挿入となり、既存のテキストは削除されません。
TS_CHAR_EMBEDDED をこのメソッドに渡すことはできません。埋め込みオブジェクトには、代わりに ITextStoreAnchor::InsertEmbedded を使用してください。
置き換えるテキスト範囲がリージョン境界をまたぐ場合、このメソッドは失敗します。その場合、呼び出し側はリージョンごとにメソッドを複数回呼び出してください。
ITextStoreAnchor::GetFormattedText メソッドは、テキストストリームから書式付きテキストの情報を返します。
| paStart | IAnchor* | in | 書式付きテキストの取得を開始するアンカー位置。 |
| paEnd | IAnchor* | in | 書式付きテキストの取得を終了するアンカー位置。 |
| ppDataObject | IDataObject** | out | 書式付きテキストを格納する IDataObject オブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 開始アンカーまたは終了アンカーの有効なインターフェイスポインターを取得できませんでした。 | |
| メソッドが実装されていない場合、アプリケーションはこの値を返すことができます。 | |
| 呼び出し側がドキュメントの読み取り/書き込みロックを保持していません。 |
解説(Remarks)
テキスト、埋め込みオブジェクト、およびすべての書式は、単一の IDataObject オブジェクトにまとめられます。これにより、クライアントはテキストに関連付けられたアプリケーション固有のプライベートな書式を保持できます。
ITextStoreAnchor::GetEmbedded メソッドは、テキストストリームから埋め込みオブジェクトを取得します。
| dwFlags | DWORD | in | 非表示テキストの扱い方を指定するビットフィールド。TS_GEA_HIDDEN が設定されている場合、非表示テキスト内の埋め込みオブジェクトも検索対象になります。それ以外の場合、非表示テキストはスキップされます。 | ||||||||
| paPos | IAnchor* | in | TS_CHAR_EMBEDDED 文字で表される埋め込みオブジェクトの直前に位置するアンカーへのポインター。 | ||||||||
| rguidService | GUID* | in | 取得するオブジェクトの要求形式を定義する GUID 値を格納します。次のいずれかの値を指定できます。
| ||||||||
| riid | GUID* | in | 要求するインターフェイスの型を指定します。 | ||||||||
| ppunk | IUnknown** | out | 要求されたインターフェイスを受け取る IUnknown ポインターへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 要求されたオブジェクトを取得できませんでした。 | |
| 1 つ以上のパラメーターが無効です。 | |
| 実装側のアプリケーションは、テキストストリーム内に埋め込みオブジェクトを公開していません。 | |
| 要求された paPos アンカーがドキュメント内にありません。 | |
| 要求されたインターフェイスの型はサポートされていません。 | |
| 呼び出し側が読み取り専用ロックを保持していません。 | |
| TS_CHAR_EMBEDDED 文字の直前に paPos アンカーがありません。 | |
| rguidService で指定されたサービスの種類はサポートされていません。 |
解説(Remarks)
呼び出し側は QueryInterface を使用して適切なインターフェイスを探索する必要があります。対象となるインターフェイスには、IOleObject、IDataObject、IViewObject、IPersistStorage、IOleCache、IDispatch など、埋め込みドキュメントやコントロールに関連するものが含まれます。
ITextStoreAnchor::InsertEmbedded メソッド
| dwFlags | DWORD | in | TS_IE_CORRECTION である必要があります。 |
| paStart | IAnchor* | in | 挿入するオブジェクトの開始位置にあるアンカーへのポインター。 |
| paEnd | IAnchor* | in | 挿入するオブジェクトの終了位置にあるアンカーへのポインター。 |
| pDataObject | IDataObject* | in | IDataObject データオブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 開始アンカーまたは終了アンカーの有効なインターフェイスポインターを取得できませんでした。 | |
| 1 つ以上の入力パラメーターが無効です。 | |
| アプリケーションは埋め込みオブジェクトをサポートしていません。 | |
| アプリケーションは pDataObject に含まれるデータ型をサポートしていません。 | |
| paStart または paEnd がドキュメント内にありません。 | |
| 呼び出し側が読み取り/書き込みロックを保持していません。 |
ITextStoreAnchor::RequestSupportedAttrs メソッド
| dwFlags | DWORD | in | 後続の ITextStoreAnchor::RetrieveRequestedAttrs メソッド呼び出しでサポートされる属性を取得するかどうかを指定します。TS_ATTR_FIND_WANT_VALUE フラグを指定した場合、後続の ITextStoreAnchor::RetrieveRequestedAttrs 呼び出しの後、既定の属性値は TS_ATTRVAL 構造体内の値になります。このパラメーターに他のフラグを指定した場合、メソッドは属性がサポートされていることを確認するだけで、TS_ATTRVAL 構造体の varValue メンバーは VT_EMPTY に設定されます。 |
| cFilterAttrs | DWORD | in | 取得するサポート対象属性の数を指定します。 |
| paFilterAttrs | GUID* | in | 確認する属性を指定する TS_ATTRID データ型へのポインター。他の属性がサポートされている場合でも、このメソッドは TS_ATTRID で指定された属性のみを返します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 原因不明のエラーが発生しました。 | |
| 処理を完了するのに十分なメモリを割り当てられませんでした。 |
ITextStoreAnchor::RequestAttrsAtPosition メソッド
| paPos | IAnchor* | in | アンカーへのポインター。 |
| cFilterAttrs | DWORD | in | 取得する属性の数を指定します。 |
| paFilterAttrs | GUID* | in | 確認する属性を指定する TS_ATTRID データ型へのポインター。 |
| dwFlags | DWORD | in | 0 である必要があります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| paPos アンカーが無効です。 |
ITextStoreAnchor::RequestAttrsTransitioningAtPosition メソッド
| paPos | IAnchor* | in | アンカーへのポインター。 | ||||||
| cFilterAttrs | DWORD | in | 取得する属性の数を指定します。 | ||||||
| paFilterAttrs | GUID* | in | 確認する属性を指定する TS_ATTRID データ型へのポインター。 | ||||||
| dwFlags | DWORD | in | ITextStoreAnchor::RetrieveRequestedAttrs メソッドの呼び出しに対する属性を指定します。このパラメーターを設定しない場合、メソッドは指定されたアンカー位置で開始する属性を返します。このパラメーターに指定できる他の値は次のとおりです。
|
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| paPos が無効です。 |
解説(Remarks)
「This is italic text.」という文では、italic 属性は単語 italic の前で開始し、単語 text の後で終了します。
dwFlags に TS_ATTR_FIND_WANT_END フラグが設定されている場合、「italic <anchor>normal」というテキストに対して、アンカー位置に終了の遷移があるため、メソッドは italic 属性を返します。
ITextStoreAnchor::FindNextAttrTransition メソッドは、属性値の遷移が発生するテキストストリーム内の位置を検索します。確認対象として指定する属性はアプリケーションに依存します。
| paStart | IAnchor* | in | 属性の遷移を検索する範囲の開始位置にあるアンカーへのポインター。 | ||||||||
| paHalt | IAnchor* | in | 属性の遷移を検索する範囲の終了位置にあるアンカーへのポインター。 | ||||||||
| cFilterAttrs | DWORD | in | 確認する属性の数を指定します。 | ||||||||
| paFilterAttrs | GUID* | in | 確認する属性を指定する TS_ATTRID データ型へのポインター。定義済みの属性は tsattrs.h に記載されています。 | ||||||||
| dwFlags | DWORD | in | 属性の遷移を検索する方向を指定します。既定では、メソッドは前方に検索します。
| ||||||||
| pfFound | BOOL* | out | 属性の遷移が見つかった場合は TRUE、見つからなかった場合は FALSE のブール値を受け取ります。 | ||||||||
| plFoundOffset | INT* | out | 開始アンカー paStart からの属性遷移の文字オフセットを受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| paStart または paHalt が無効です。 | |
| 指定された文字位置がドキュメント内のテキストの範囲を超えています。 |
ITextStoreAnchor::RetrieveRequestedAttrs メソッド
| ulCount | DWORD | in | 取得するサポート対象属性の数を指定します。 |
| paAttrVals | TS_ATTRVAL* | out | サポートされる属性を受け取る TS_ATTRVAL 構造体へのポインター。この構造体のメンバーは、呼び出し元メソッドの dwFlags パラメーターによって異なります。 |
| pcFetched | DWORD* | out | サポートされる属性の数を受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
ITextStoreAnchor::GetStart メソッドは、テキストストリームの先頭に位置するアンカーを返します。
| ppaStart | IAnchor** | out | テキストストリームの先頭にあるアンカーオブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ppaStart が無効です。 | |
| テキストストリームの先頭にアンカーを生成できませんでした。 |
ITextStoreAnchor::GetEnd メソッドは、テキストストリームの末尾に位置するアンカーを返します。
| ppaEnd | IAnchor** | out | テキストストリームの最後尾にあるアンカーオブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ppaEnd が無効です。 | |
| アプリケーションがこのメソッドを実装していません。これは通常、終了位置の算出に過大なリソースが必要であることを示します。終了位置が必要な場合は、ITextStoreAnchor::GetText を使用して算出できますが、これもディスクから任意の大きさのメモリをページインする、メモリを大量に消費する操作になる可能性があります。 | |
| ドキュメントの末尾にアンカーを生成できませんでした。 | |
| 呼び出し側が読み取り専用ロックを保持していません。 |
ITextStoreAnchor::GetActiveView メソッドは、現在のアクティブなビューを示す TsViewCookie データ型を返します。TSF はアクティブなビューを 1 つしかサポートしないため、特定のテキストストアは常に同じ TsViewCookie データ型を返す必要があります。
| pvcView | DWORD* | out | 現在のアクティブなビューを示す TsViewCookie データ型を受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pvcView が無効です。 |
ITextStoreAnchor::GetAnchorFromPoint メソッドは、スクリーン座標の点を、対応する位置に配置されたアンカーに変換します。
| vcView | DWORD | in | コンテキストのビューを指定します。 | ||||||
| ptScreen | POINT* | in | 点のスクリーン座標を格納した POINT 構造体へのポインター。 | ||||||
| dwFlags | DWORD | in | 文字の境界ボックスに対する点のスクリーン座標に基づいて、返すアンカー位置を指定します。既定では、返されるアンカー位置は、その点のスクリーン座標を含む文字の境界ボックスです。点が文字の境界ボックスの外にある場合、メソッドは NULL または TF_E_INVALIDPOINT を返します。このパラメーターに指定できる他のビットフラグは次のとおりです。 ビットフラグは組み合わせて指定できます。
| ||||||
| ppaSite | IAnchor** | out | スクリーン座標 ptScreen に対応する位置にあるアンカーオブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メソッドは失敗しました。 | |
| 1 つ以上の入力パラメーターが無効です。 | |
| 指定された位置にアンカーを生成できませんでした。 | |
| ptScreen パラメーターがどの文字の境界ボックスにも含まれていません。 | |
| アプリケーションがまだテキストレイアウトを算出していません。 |
解説(Remarks)
点 1 のスクリーン座標は文字位置 0 の文字境界ボックス内にあるため、既定の場合、または dwFlags パラメーターに GXFPF_NEAREST を設定した場合、アンカー ppaSite のオフセット(文字位置)は 0 になります。点 1 に対して dwFlags パラメーターに GXFPF_ROUND_NEAREST を設定した場合、点 1 のスクリーン座標はレンジ位置 1 に最も近いため、アンカーのオフセットは 1 になります。レンジ位置 1 は、文字位置 1 の開始レンジ位置です。
点 2 のスクリーン座標は文字の境界ボックスの外にあるため、既定の場合、または dwFlags パラメーターに GXFPF_NEAREST を設定した場合、メソッドは TF_E_INVALIDPOINT を返します。dwFlags パラメーターに GXFPF_ROUND_NEAREST を設定した場合、点 2 のスクリーン座標に最も近い文字位置は文字位置 1 であるため、アンカーのオフセットは 1 になります。
点 1
- 既定 -- アンカーのオフセット = 0 -- 点のスクリーン座標が文字位置 0 の文字境界ボックス内にあるためです。
- GXFPF_ROUND_NEAREST -- アンカーのオフセット = 1 -- 点のスクリーン座標が、文字位置 1 の開始レンジ位置であるレンジ位置 1 に最も近いためです。
- GXFPF_NEAREST -- アンカーのオフセット = 0 -- 点が文字位置 0 の文字境界ボックス内にあるため、既定の動作になります。
- 既定 -- hr = TF_E_INVALIDPOINT -- 点のスクリーン座標が文字の境界ボックスの外にあるためです。
- GXFPF_ROUND_NEAREST -- hr = TF_E_INVALIDPOINT -- 点のスクリーン座標が文字の境界ボックスの外にあるため、既定の動作になります。
- GXFPF_NEAREST -- アンカーのオフセット = 1 -- 点のスクリーン座標に最も近い文字位置が文字位置 1 であるためです。
ITextStoreAnchor::GetTextExt メソッドは、テキスト範囲(レンジ)の境界ボックスをスクリーン座標で返します。呼び出し側は、このメソッドを呼び出す前にドキュメントの読み取り専用ロックを取得しておく必要があります。
| vcView | DWORD | in | コンテキストのビューを指定します。 |
| paStart | IAnchor* | in | 範囲の先頭に位置するアンカーを指定します。 |
| paEnd | IAnchor* | in | 範囲の末尾に位置するアンカーを指定します。 |
| prc | RECT* | out | テキスト範囲の境界ボックスをスクリーン座標で受け取ります。 |
| pfClipped | BOOL* | out | 境界ボックス内のテキストがクリップされているかどうかを示すブール値を受け取ります。TRUE の場合、境界ボックスにはクリップされたテキストが含まれ、要求されたテキスト範囲全体は含まれません。要求された範囲が表示されていないため、境界ボックスがクリップされています。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 開始アンカーまたは終了アンカーの有効なインターフェイスポインターを取得できませんでした。 | |
|
1 つ以上の入力パラメーターが無効です。 |
| paStart および paEnd パラメーターで指定された範囲が、ドキュメントの先頭または末尾を越えています。 | |
| アプリケーションがテキストレイアウトを算出していません。アプリケーションが ITextStoreAnchorSink::OnLayoutChange を呼び出すまで、以降の呼び出しは成功しません。 | |
| 呼び出し側がドキュメントの読み取り専用ロックを保持していません。 |
解説(Remarks)
ドキュメントのウィンドウが最小化されている場合、または指定されたテキストが現在表示されていない場合、メソッドは prc パラメーターを {0,0,0,0} に設定して S_OK を返します。
ITextStoreAnchor::GetScreenExt メソッドは、テキストストリームが描画される表示面の境界ボックスをスクリーン座標で返します。
| vcView | DWORD | in | コンテキストのビューを指定します。 |
| prc | RECT* | out | ドキュメントの表示面の境界ボックスをスクリーン座標で受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 指定された vcView パラメーターが無効です。 |
解説(Remarks)
ドキュメントのウィンドウが最小化されている場合など、テキストが現在表示されていない場合、prc パラメーターは { 0, 0, 0, 0 } に設定されます。
ITextStoreAnchor::GetWnd メソッドは、現在のテキストストリームに対応するウィンドウのハンドルを返します。
| vcView | DWORD | in | 現在のドキュメントに対応する TsViewCookie データ型を指定します。 |
| phwnd | HWND* | out | 現在のドキュメントに対応するウィンドウのハンドルへのポインターを受け取ります。ドキュメントに対応するウィンドウハンドルがない場合、このパラメーターは NULL になることがあります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| TsViewCookie データ型が無効です。 |
解説(Remarks)
ドキュメントがメモリ上に存在するが画面に表示されていない場合、またはドキュメントがウィンドウレスコントロールであり、そのコントロールがウィンドウレスコントロールの所有者のウィンドウハンドルを認識していない場合、ドキュメントに対応するウィンドウハンドルが存在しないことがあります。呼び出し側は、メソッドが成功した場合でも phwnd パラメーターが非 NULL の値を受け取ると想定してはなりません。呼び出し側は phwnd パラメーターとして NULL を受け取ることもあります。
ITextStoreAnchor::QueryInsertEmbedded メソッド
| pguidService | GUID* | in | オブジェクトの種類へのポインター。NULL の場合は pFormatEtc を使用します。 |
| pFormatEtc | FORMATETC* | in | オブジェクトの形式データを格納する FORMATETC 構造体へのポインター。pguidService パラメーターが NULL の場合、このパラメーターを NULL にすることはできません。 |
| pfInsertable | BOOL* | out | そのオブジェクトの種類をドキュメントに挿入できる場合は TRUE、挿入できない場合は FALSE を受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pFormatEtc パラメーターが NULL です。 |
解説(Remarks)
ドキュメントがサポートするクリップボード形式は、アプリケーションに依存します。
ITextStoreAnchor::InsertTextAtSelection メソッド
| dwFlags | DWORD | in | paStart および paEnd パラメーターにテキスト挿入の結果を格納するかどうかを指定します。 TF_IAS_NOQUERY フラグと TF_IAS_QUERYONLY フラグは組み合わせられません。 |
| pchText | LPWSTR | in | ドキュメントに挿入する文字列へのポインター。文字列は NULL 終端でもかまいません。 |
| cch | DWORD | in | テキストの長さを指定します。 |
| ppaStart | IAnchor** | out | テキスト挿入の開始位置にあるアンカーオブジェクトへのポインター。 |
| ppaEnd | IAnchor** | out | テキスト挿入の終了位置にあるアンカーオブジェクトへのポインター。挿入ポイントの場合、このパラメーターの値は ppaStart パラメーターの値と同じになります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| アンカー paStart または paEnd のいずれかを生成できませんでした。 | |
| pchText パラメーターが無効です。 | |
| 呼び出し側がドキュメントのロックを保持していません。 |
ITextStoreAnchor::InsertEmbeddedAtSelection メソッドは、挿入ポイントまたは選択範囲に IDataObject オブジェクトを挿入します。このメソッドを呼び出すクライアントは、テキストストリームに IDataObject を挿入する前に読み取り/書き込みロックを取得しておく必要があります。
| dwFlags | DWORD | in | paStart および paEnd パラメーターにオブジェクト挿入の結果を格納するかどうかを指定します。 TF_IAS_NOQUERY フラグと TF_IAS_QUERYONLY フラグは組み合わせられません。 |
| pDataObject | IDataObject* | in | 挿入する IDataObject オブジェクトへのポインター。 |
| ppaStart | IAnchor** | out | オブジェクト挿入の開始位置にあるアンカーオブジェクトへのポインター。 |
| ppaEnd | IAnchor** | out | オブジェクト挿入の終了位置にあるアンカーオブジェクトへのポインター。挿入ポイントの場合、このパラメーターの値は ppaStart パラメーターの値と同じになります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| アンカー paStart または paEnd のいずれかを生成できませんでした。 | |
| pchText パラメーターが無効です。 | |
| アンカー paStart または paEnd のいずれかを生成できませんでした。 | |
| 呼び出し側がドキュメントのロックを保持していません。 |
解説(Remarks)
TS_CHAR_EMBEDDED 定数は ITextStoreAnchor::SetText に渡せないため、クライアントはテキストストリームにオブジェクトを挿入する際に必ずこのメソッドを使用する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITextStoreAnchor "{9B2077B0-5F18-4DEC-BEE9-3CC722F5DFE0}" #usecom global ITextStoreAnchor IID_ITextStoreAnchor "{}" #comfunc global ITextStoreAnchor_AdviseSink 3 var,sptr,int #comfunc global ITextStoreAnchor_UnadviseSink 4 sptr #comfunc global ITextStoreAnchor_RequestLock 5 int,var #comfunc global ITextStoreAnchor_GetStatus 6 var #comfunc global ITextStoreAnchor_QueryInsert 7 sptr,sptr,int,sptr,sptr #comfunc global ITextStoreAnchor_GetSelection 8 int,int,var,var #comfunc global ITextStoreAnchor_SetSelection 9 int,var #comfunc global ITextStoreAnchor_GetText 10 int,sptr,sptr,var,int,var,int #comfunc global ITextStoreAnchor_SetText 11 int,sptr,sptr,wstr,int #comfunc global ITextStoreAnchor_GetFormattedText 12 sptr,sptr,sptr #comfunc global ITextStoreAnchor_GetEmbedded 13 int,sptr,var,var,sptr #comfunc global ITextStoreAnchor_InsertEmbedded 14 int,sptr,sptr,sptr #comfunc global ITextStoreAnchor_RequestSupportedAttrs 15 int,int,var #comfunc global ITextStoreAnchor_RequestAttrsAtPosition 16 sptr,int,var,int #comfunc global ITextStoreAnchor_RequestAttrsTransitioningAtPosition 17 sptr,int,var,int #comfunc global ITextStoreAnchor_FindNextAttrTransition 18 sptr,sptr,int,var,int,var,var #comfunc global ITextStoreAnchor_RetrieveRequestedAttrs 19 int,var,var #comfunc global ITextStoreAnchor_GetStart 20 sptr #comfunc global ITextStoreAnchor_GetEnd 21 sptr #comfunc global ITextStoreAnchor_GetActiveView 22 var #comfunc global ITextStoreAnchor_GetAnchorFromPoint 23 int,var,int,sptr #comfunc global ITextStoreAnchor_GetTextExt 24 int,sptr,sptr,var,var #comfunc global ITextStoreAnchor_GetScreenExt 25 int,var #comfunc global ITextStoreAnchor_GetWnd 26 int,sptr #comfunc global ITextStoreAnchor_QueryInsertEmbedded 27 var,var,var #comfunc global ITextStoreAnchor_InsertTextAtSelection 28 int,wstr,int,sptr,sptr #comfunc global ITextStoreAnchor_InsertEmbeddedAtSelection 29 int,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITextStoreAnchor "{9B2077B0-5F18-4DEC-BEE9-3CC722F5DFE0}" #usecom global ITextStoreAnchor IID_ITextStoreAnchor "{}" #comfunc global ITextStoreAnchor_AdviseSink 3 sptr,sptr,int #comfunc global ITextStoreAnchor_UnadviseSink 4 sptr #comfunc global ITextStoreAnchor_RequestLock 5 int,sptr #comfunc global ITextStoreAnchor_GetStatus 6 sptr #comfunc global ITextStoreAnchor_QueryInsert 7 sptr,sptr,int,sptr,sptr #comfunc global ITextStoreAnchor_GetSelection 8 int,int,sptr,sptr #comfunc global ITextStoreAnchor_SetSelection 9 int,sptr #comfunc global ITextStoreAnchor_GetText 10 int,sptr,sptr,sptr,int,sptr,int #comfunc global ITextStoreAnchor_SetText 11 int,sptr,sptr,wstr,int #comfunc global ITextStoreAnchor_GetFormattedText 12 sptr,sptr,sptr #comfunc global ITextStoreAnchor_GetEmbedded 13 int,sptr,sptr,sptr,sptr #comfunc global ITextStoreAnchor_InsertEmbedded 14 int,sptr,sptr,sptr #comfunc global ITextStoreAnchor_RequestSupportedAttrs 15 int,int,sptr #comfunc global ITextStoreAnchor_RequestAttrsAtPosition 16 sptr,int,sptr,int #comfunc global ITextStoreAnchor_RequestAttrsTransitioningAtPosition 17 sptr,int,sptr,int #comfunc global ITextStoreAnchor_FindNextAttrTransition 18 sptr,sptr,int,sptr,int,sptr,sptr #comfunc global ITextStoreAnchor_RetrieveRequestedAttrs 19 int,sptr,sptr #comfunc global ITextStoreAnchor_GetStart 20 sptr #comfunc global ITextStoreAnchor_GetEnd 21 sptr #comfunc global ITextStoreAnchor_GetActiveView 22 sptr #comfunc global ITextStoreAnchor_GetAnchorFromPoint 23 int,sptr,int,sptr #comfunc global ITextStoreAnchor_GetTextExt 24 int,sptr,sptr,sptr,sptr #comfunc global ITextStoreAnchor_GetScreenExt 25 int,sptr #comfunc global ITextStoreAnchor_GetWnd 26 int,sptr #comfunc global ITextStoreAnchor_QueryInsertEmbedded 27 sptr,sptr,sptr #comfunc global ITextStoreAnchor_InsertTextAtSelection 28 int,wstr,int,sptr,sptr #comfunc global ITextStoreAnchor_InsertEmbeddedAtSelection 29 int,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。