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

ITextStoreAnchor

COM
IID9b2077b0-5f18-4dec-bee9-3cc722f5dfe0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ITextStoreAnchor インターフェイスは Microsoft Active Accessibility クライアントによって実装され、TSF マネージャーがテキストストリームを操作するために使用します。

メソッド 27

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

vtbl 3 HRESULT AdviseSink(GUID* riid, IUnknown* punk, DWORD dwMask)

ITextStoreAnchor::AdviseSink メソッドは、ITextStoreAnchorSink インターフェイスの新しいアドバイズシンクをインストールするか、既存のアドバイズシンクを変更します。

riidGUID*inシンクのインターフェイスを指定します。サポートされる値は IID_ITextStoreAnchorSink のみです。
punkIUnknown*inアドバイズ対象のシンクインターフェイスへのポインター。NULL にはできません。
dwMaskDWORDinアドバイズシンクに通知するイベントを指定します。指定可能な値の詳細については、TS_AS_* 定数を参照してください。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
指定されたシンクインターフェイス riid を取得できませんでした。
E_INVALIDARG
指定されたシンクインターフェイスはサポートされていません。
E_UNEXPECTED
指定されたシンクオブジェクトを取得できませんでした。

解説(Remarks)

punk パラメーターで表される同じインターフェイスに対する 2 回目以降の呼び出しは、dwMask パラメーターの更新要求として処理されます。サーバーは、このような要求に応じてシンクに対して AddRef メソッドを呼び出してはなりません。

サーバーが保持する接続ポイントは 1 つだけです。元のシンクオブジェクトが解除されるまで、2 つ目のシンクオブジェクトをアドバイズしようとしても失敗します。通知が不要になった場合、アプリケーションは ITextStoreAnchor::UnadviseSink メソッドを使用してシンクオブジェクトの登録を解除してください。

vtbl 4 HRESULT UnadviseSink(IUnknown* punk)

ITextStoreAnchor::UnadviseSink メソッド

punkIUnknown*inシンクオブジェクトへのポインター。NULL にはできません。

戻り値

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

説明
S_OK
メソッドは成功しました。
CONNECT_E_NOCONNECTION
アクティブなシンクオブジェクトがありません。

解説(Remarks)

新しいシンクオブジェクトを登録する ITextStoreAnchor::AdviseSink メソッドの呼び出しごとに、このメソッドの呼び出しを対応させる必要があります。AdviseSink が、既に登録済みのシンクの dwMask パラメーターを更新しただけの場合は、UnadviseSink の呼び出しは不要です。

たとえば、シンクオブジェクトを登録するために、アプリケーションは最初に AdviseSink メソッドを呼び出します。その後、同じシンクオブジェクトを指定して AdviseSink メソッドを再度呼び出し、dwMask パラメーターを変更できます。シンクオブジェクトの登録を解除するには、UnadviseSink メソッドを呼び出します。

punk パラメーターは、AdviseSink メソッドに最初に渡したポインターと同一の COM アイデンティティを持つ必要があります。

vtbl 5 HRESULT RequestLock(DWORD dwLockFlags, HRESULT* phrSession)

ITextStoreAnchor::RequestLock メソッド

dwLockFlagsDWORDin

要求するロックの種類を指定します。

意味
TS_LF_READ
ドキュメントは読み取り専用ロックを持ち、変更できません。
TS_LF_READWRITE
ドキュメントは読み取り/書き込みロックを持ち、変更できます。
TS_LF_SYNC
このフラグを他のフラグと組み合わせると、ドキュメントは同期ロックを持ちます。
phrSessionHRESULT*out

ロック要求が同期の場合、ロック要求の結果を示す ITextStoreAnchorSink::OnLockGranted メソッドからの HRESULT 値を受け取ります。

ロック要求が非同期で結果が TS_S_ASYNC の場合、ドキュメントは非同期ロックを取得します。ロック要求が非同期で結果が TS_E_SYNCHRONOUS の場合、ドキュメントを同期的にロックすることはできません。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

このメソッドは ITextStoreAnchorSink::OnLockGranted メソッドを使用してドキュメントをロックします。アプリケーションは、ITextStoreAnchor::RequestLock メソッドの内部でドキュメントを変更したり、ITextStoreAnchorSink::OnTextChange メソッドで変更通知を送信したりしてはなりません。報告すべき変更が保留中の場合、アプリケーションは非同期のロック要求にのみ応答できます。

アプリケーションは、複数の ITextStoreAnchor::RequestLock メソッド呼び出しをキューに入れようとしないでください。必要なコールバックは 1 回だけだからです。ただし、呼び出し側が複数の読み取り要求と 1 つ以上の書き込み要求を行った場合、コールバックは書き込みアクセス用にする必要があります。

同期ロックの要求が成功した場合、その要求は非同期ロックの要求に優先します。同期ロックの要求が失敗した場合は、非同期ロックの要求に優先しません。実装側は、未処理の非同期要求が存在する場合、その要求を引き続き処理する必要があります。

ITextStoreAnchor::RequestLock メソッドが返る前にロックが許可された場合、phrSession パラメーターは ITextStoreAnchorSink::OnLockGranted メソッドが返した HRESULT を受け取ります。呼び出しは成功したものの、ロックが後で許可される場合、phrSession パラメーターは TS_S_ASYNC フラグを受け取ります。ITextStoreAnchor::RequestLockS_OK 以外を返した場合、phrSession パラメーターは無視してください。

呼び出し側は、このメソッドを再入的に呼び出してはなりません。ただし、呼び出し側が読み取り専用ロックを保持している場合は例外です。この場合、非同期の書き込みロックを要求するために再入的に呼び出すことができます。書き込みロックは、読み取り専用ロックが終了した後で許可されます。

ドキュメントのロックの詳細については、Document Locks を参照してください。

vtbl 6 HRESULT GetStatus(TS_STATUS* pdcs)

ITextStoreAnchor::GetStatus メソッドは、ドキュメントの状態を取得します。ドキュメントの状態は TS_STATUS 構造体として返されます。

pdcsTS_STATUS*outドキュメントの状態を格納する TS_STATUS 構造体を受け取ります。NULL にはできません。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
TS_STATUS パラメーターへのポインターが無効です。
vtbl 7 HRESULT QueryInsert(IAnchor* paTestStart, IAnchor* paTestEnd, DWORD cch, IAnchor** ppaResultStart, IAnchor** ppaResultEnd)

ITextStoreAnchor::QueryInsert メソッドは、指定された開始アンカーと終了アンカーが有効かどうかを判定します。ドキュメントへの編集を実行する前に、その編集内容を調整するためにこのメソッドを使用します。このメソッドは、ドキュメントの範囲外の値を返してはなりません。

paTestStartIAnchor*in挿入するテキストの開始アンカーへのポインターを受け取ります。
paTestEndIAnchor*in挿入するテキストの終了アンカーへのポインターを受け取ります。選択テキストを置き換えるのではなく、ある位置にテキストを挿入する場合は、paTestStart と同じになります。
cchDWORDin置換テキストの長さ。
ppaResultStartIAnchor**out挿入されるテキストの開始位置にある新しいアンカーオブジェクトへのポインター。このパラメーターの値が NULL の場合、指定された位置にテキストを挿入することはできません。このアンカーはドキュメントの外部に置くことはできません。
ppaResultEndIAnchor**out挿入されるテキストの終了位置にある新しいアンカーオブジェクトへのポインター。このパラメーターの値が NULL の場合、指定された位置にテキストを挿入することはできません。このアンカーはドキュメントの外部に置くことはできません。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
原因不明のエラーが発生しました。
E_INVALIDARG
paTestStart または paTestEnd パラメーターが無効です。
E_OUTOFMEMORY
ppaResultStart または ppaResultEnd のアンカーの生成に失敗しました。

解説(Remarks)

ppaResultStartppaResultEnd の値は、アプリケーションがドキュメントにテキストを挿入する方法によって異なります。ppaResultStartppaResultEndpaTestStart と同じ場合、挿入後のカーソルは挿入されたテキストの先頭に位置します。ppaResultStartppaResultEndpaTextEnd と同じ場合、挿入後のカーソルは挿入されたテキストの末尾に位置します。

vtbl 8 HRESULT GetSelection(DWORD ulIndex, DWORD ulCount, TS_SELECTION_ANCHOR* pSelection, DWORD* pcFetched)

ITextStoreAnchor::GetSelection メソッドは、テキストストリーム内の選択テキストのオフセットを返します。このメソッドは複数のテキスト選択をサポートします。呼び出し側は、このメソッドを呼び出す前にドキュメントの読み取り専用ロックを取得しておく必要があります。

ulIndexDWORDin処理を開始するテキスト選択を指定します。このパラメーターに TF_DEFAULT_SELECTION 定数を指定すると、入力用の選択から処理が開始され、単一の選択(入力操作に適した選択)のみが返されます。
ulCountDWORDin返す選択の最大数を指定します。
pSelectionTS_SELECTION_ANCHOR*out選択テキストのスタイル、開始文字位置、終了文字位置を受け取ります。これらの値は TS_SELECTION_ANCHOR 構造体に格納されます。
pcFetchedDWORD*out返された pSelection 構造体の数を受け取ります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
開始アンカーまたは終了アンカーを TS_SELECTION_ANCHOR 構造体に格納できませんでした。
E_OUTOFMEMORY
選択用のメモリを割り当てられませんでした。
TS_E_NOLOCK
呼び出し側がドキュメントの読み取り専用ロックを保持していません。
TS_E_NOSELECTION
ドキュメントに選択がありません。
vtbl 9 HRESULT SetSelection(DWORD ulCount, TS_SELECTION_ANCHOR* pSelection)

ITextStoreAnchor::SetSelection メソッド

ulCountDWORDinpSelection 内のテキスト選択の数を指定します。
pSelectionTS_SELECTION_ANCHOR*in

TS_SELECTION_ANCHOR 構造体を通じて選択されたテキストのスタイル、開始文字位置、終了文字位置を指定します。構造体の開始アンカーメンバー paStart は、終了アンカーメンバー paEnd より後ろに位置してはなりません(同じ位置にあることは許容されます)。

paStart = paEnd の場合、このメソッドはそのアンカー位置にキャレットを配置します。テキストストリーム内に同時に存在できるキャレットは 1 つだけです。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
原因不明のエラーが発生しました。
E_OUTOFMEMORY
処理を完了するのに十分なメモリを割り当てられませんでした。
TF_E_INVALIDPOS
指定されたアンカー位置がドキュメント内のテキストの範囲を超えています。
TF_E_NOLOCK
呼び出し側が読み取り/書き込みロックを保持していません。
vtbl 10 HRESULT GetText(DWORD dwFlags, IAnchor* paStart, IAnchor* paEnd, LPWSTR pchText, DWORD cchReq, DWORD* pcch, BOOL fUpdateAnchor)

ITextStoreAnchor::GetText メソッドは、指定されたアンカー位置のテキストに関する情報を返します。このメソッドは表示テキストと非表示テキストを返し、埋め込みデータがテキストに付随しているかどうかを示します。

dwFlagsDWORDin使用しません。0 を指定してください。
paStartIAnchor*in開始アンカー位置を指定します。
paEndIAnchor*in終了アンカー位置を指定します。NULL の場合、テキストストリームの最後尾に位置するアンカーとして扱われます。
pchTextLPWSTRoutテキストを受け取るバッファーを指定します。cchReq = 0 の場合に限り NULL にできます。
cchReqDWORDinpchText バッファーのサイズを文字数で指定します。
pcchDWORD*outpchText バッファーにコピーされた文字数を受け取ります。
fUpdateAnchorBOOLinTRUE の場合、paStartpchText にコピーされた最後の文字の直後に再配置されます。

戻り値

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

説明
S_OK
メソッドは正常に完了しました。
E_FAIL
paStart または paEnd の有効なインターフェイスポインターを取得できませんでした。
TF_E_INVALIDPOS
paStart または paEnd のアンカーがドキュメントのテキストの外部にあります。
TS_E_NOLOCK
呼び出し側がドキュメントの読み取り専用ロックを保持していません。

解説(Remarks)

このメソッドを使用する呼び出し側は、ITextStoreAnchor::RequestLock メソッドを呼び出してドキュメントの読み取り専用ロックを取得しておく必要があります。読み取り専用ロックがない場合、このメソッドは失敗し TF_E_NOLOCK を返します。

アプリケーションは、内部的な理由によりメソッドの戻り値を切り詰めることがあります。

複数回の GetText 呼び出しでテキストを高速に走査するには、呼び出し側は fUpdateAnchor = TRUE を使用します。

paStartpaEnd の間の文字数が cchReq より少ない場合、実際にコピーされる文字数は cchReq より少なくなることがあります。

GetText の動作は、返されるテキストが含むリージョン境界の影響を受けません。

vtbl 11 HRESULT SetText(DWORD dwFlags, IAnchor* paStart, IAnchor* paEnd, LPWSTR pchText, DWORD cch)

ITextStoreAnchor::SetText メソッドは、指定された 2 つのアンカー位置の間のテキスト選択を設定します。

dwFlagsDWORDinTS_ST_CORRECTION が設定されている場合、テキストは既存の内容に対する変換(修正)であり、.wav ファイルデータや言語識別子などの特別なテキストマークアップ情報(メタデータ)が保持されます。保持するマークアップ情報の種類はクライアントが定義します。
paStartIAnchor*in置き換えるテキスト範囲の先頭にあるアンカーへのポインター。
paEndIAnchor*in置き換えるテキスト範囲の末尾にあるアンカーへのポインター。常に paStart と同じ位置か、それより後ろに位置する必要があります。
pchTextLPWSTRin置換テキストへのポインター。文字数は cch パラメーターで指定されるため、テキスト文字列は NULL 終端である必要はありません。
cchDWORDin置換テキストの文字数を指定します。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
アンカー paStart または paEnd のいずれかを生成できませんでした。
TS_E_INVALIDPOS
paStart または paEnd の位置がドキュメントのテキストの外部にあります。
TS_E_NOLOCK
呼び出し側が読み取り/書き込みロックを保持していません。
TS_E_READONLY
ドキュメントは読み取り専用です。内容を変更できません。
TS_E_REGION
リージョン境界をまたいでテキストを変更しようとしました。

解説(Remarks)

アプリケーションは、まず ITextStoreAnchor::InsertTextAtSelection を使用してコンポジション(変換中の文字列)を開始してください。ITextStoreAnchor::SetText は、既存のコンポジション内でのみ使用してください。SetText を呼び出した時点でアクティブなコンポジションが存在しない場合、TSF マネージャーは SetText の呼び出しを包含するだけの短命なコンポジションを作成します。

呼び出し側は、ITextStoreAnchor::RequestLock で取得した書き込みロックを保持している必要があります。保持していない場合、ITextStoreAnchor::SetTextTS_E_NOLOCK で失敗します。

paStartpaEnd と同じ位置にある場合、操作は挿入となり、既存のテキストは削除されません。

TS_CHAR_EMBEDDED をこのメソッドに渡すことはできません。埋め込みオブジェクトには、代わりに ITextStoreAnchor::InsertEmbedded を使用してください。

置き換えるテキスト範囲がリージョン境界をまたぐ場合、このメソッドは失敗します。その場合、呼び出し側はリージョンごとにメソッドを複数回呼び出してください。

vtbl 12 HRESULT GetFormattedText(IAnchor* paStart, IAnchor* paEnd, IDataObject** ppDataObject)

ITextStoreAnchor::GetFormattedText メソッドは、テキストストリームから書式付きテキストの情報を返します。

paStartIAnchor*in書式付きテキストの取得を開始するアンカー位置。
paEndIAnchor*in書式付きテキストの取得を終了するアンカー位置。
ppDataObjectIDataObject**out書式付きテキストを格納する IDataObject オブジェクトへのポインター。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
開始アンカーまたは終了アンカーの有効なインターフェイスポインターを取得できませんでした。
E_NOTIMPL
メソッドが実装されていない場合、アプリケーションはこの値を返すことができます。
TS_E_NOLOCK
呼び出し側がドキュメントの読み取り/書き込みロックを保持していません。

解説(Remarks)

テキスト、埋め込みオブジェクト、およびすべての書式は、単一の IDataObject オブジェクトにまとめられます。これにより、クライアントはテキストに関連付けられたアプリケーション固有のプライベートな書式を保持できます。

vtbl 13 HRESULT GetEmbedded(DWORD dwFlags, IAnchor* paPos, GUID* rguidService, GUID* riid, IUnknown** ppunk)

ITextStoreAnchor::GetEmbedded メソッドは、テキストストリームから埋め込みオブジェクトを取得します。

dwFlagsDWORDin非表示テキストの扱い方を指定するビットフィールド。TS_GEA_HIDDEN が設定されている場合、非表示テキスト内の埋め込みオブジェクトも検索対象になります。それ以外の場合、非表示テキストはスキップされます。
paPosIAnchor*inTS_CHAR_EMBEDDED 文字で表される埋め込みオブジェクトの直前に位置するアンカーへのポインター。
rguidServiceGUID*in

取得するオブジェクトの要求形式を定義する GUID 値を格納します。次のいずれかの値を指定できます。

意味
GUID_TS_SERVICE_DATAOBJECT
オブジェクトを IDataObject データオブジェクトとして取得します。
GUID_TS_SERVICE_ACCESSIBLE
オブジェクトを Accessible オブジェクトとして取得します。
GUID_TS_SERVICE_ACTIVEX
オブジェクトを ActiveX オブジェクトとして取得します。
riidGUID*in要求するインターフェイスの型を指定します。
ppunkIUnknown**out要求されたインターフェイスを受け取る IUnknown ポインターへのポインター。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
要求されたオブジェクトを取得できませんでした。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_NOTIMPL
実装側のアプリケーションは、テキストストリーム内に埋め込みオブジェクトを公開していません。
TF_E_INVALIDPOS
要求された paPos アンカーがドキュメント内にありません。
TS_E_NOINTERFACE
要求されたインターフェイスの型はサポートされていません。
TS_E_NOLOCK
呼び出し側が読み取り専用ロックを保持していません。
TS_E_NOOBJECT
TS_CHAR_EMBEDDED 文字の直前に paPos アンカーがありません。
TS_E_NOSERVICE
rguidService で指定されたサービスの種類はサポートされていません。

解説(Remarks)

呼び出し側は QueryInterface を使用して適切なインターフェイスを探索する必要があります。対象となるインターフェイスには、IOleObjectIDataObjectIViewObjectIPersistStorageIOleCacheIDispatch など、埋め込みドキュメントやコントロールに関連するものが含まれます。

vtbl 14 HRESULT InsertEmbedded(DWORD dwFlags, IAnchor* paStart, IAnchor* paEnd, IDataObject* pDataObject)

ITextStoreAnchor::InsertEmbedded メソッド

dwFlagsDWORDinTS_IE_CORRECTION である必要があります。
paStartIAnchor*in挿入するオブジェクトの開始位置にあるアンカーへのポインター。
paEndIAnchor*in挿入するオブジェクトの終了位置にあるアンカーへのポインター。
pDataObjectIDataObject*inIDataObject データオブジェクトへのポインター。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
開始アンカーまたは終了アンカーの有効なインターフェイスポインターを取得できませんでした。
E_INVALIDARG
1 つ以上の入力パラメーターが無効です。
E_NOTIMPL
アプリケーションは埋め込みオブジェクトをサポートしていません。
TS_E_FORMAT
アプリケーションは pDataObject に含まれるデータ型をサポートしていません。
TS_E_INVALIDPOS
paStart または paEnd がドキュメント内にありません。
TS_E_NOLOCK
呼び出し側が読み取り/書き込みロックを保持していません。
vtbl 15 HRESULT RequestSupportedAttrs(DWORD dwFlags, DWORD cFilterAttrs, GUID* paFilterAttrs)

ITextStoreAnchor::RequestSupportedAttrs メソッド

dwFlagsDWORDin後続の ITextStoreAnchor::RetrieveRequestedAttrs メソッド呼び出しでサポートされる属性を取得するかどうかを指定します。TS_ATTR_FIND_WANT_VALUE フラグを指定した場合、後続の ITextStoreAnchor::RetrieveRequestedAttrs 呼び出しの後、既定の属性値は TS_ATTRVAL 構造体内の値になります。このパラメーターに他のフラグを指定した場合、メソッドは属性がサポートされていることを確認するだけで、TS_ATTRVAL 構造体の varValue メンバーは VT_EMPTY に設定されます。
cFilterAttrsDWORDin取得するサポート対象属性の数を指定します。
paFilterAttrsGUID*in確認する属性を指定する TS_ATTRID データ型へのポインター。他の属性がサポートされている場合でも、このメソッドは TS_ATTRID で指定された属性のみを返します。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
原因不明のエラーが発生しました。
E_OUTOFMEMORY
処理を完了するのに十分なメモリを割り当てられませんでした。
vtbl 16 HRESULT RequestAttrsAtPosition(IAnchor* paPos, DWORD cFilterAttrs, GUID* paFilterAttrs, DWORD dwFlags)

ITextStoreAnchor::RequestAttrsAtPosition メソッド

paPosIAnchor*inアンカーへのポインター。
cFilterAttrsDWORDin取得する属性の数を指定します。
paFilterAttrsGUID*in確認する属性を指定する TS_ATTRID データ型へのポインター。
dwFlagsDWORDin0 である必要があります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
paPos アンカーが無効です。
vtbl 17 HRESULT RequestAttrsTransitioningAtPosition(IAnchor* paPos, DWORD cFilterAttrs, GUID* paFilterAttrs, DWORD dwFlags)

ITextStoreAnchor::RequestAttrsTransitioningAtPosition メソッド

paPosIAnchor*inアンカーへのポインター。
cFilterAttrsDWORDin取得する属性の数を指定します。
paFilterAttrsGUID*in確認する属性を指定する TS_ATTRID データ型へのポインター。
dwFlagsDWORDin

ITextStoreAnchor::RetrieveRequestedAttrs メソッドの呼び出しに対する属性を指定します。このパラメーターを設定しない場合、メソッドは指定されたアンカー位置で開始する属性を返します。このパラメーターに指定できる他の値は次のとおりです。

意味
TS_ATTR_FIND_WANT_END
指定されたアンカー位置で終了する属性を取得します。
TS_ATTR_FIND_WANT_VALUE
属性に加えて属性値も取得します。属性値は、ITextStoreAnchor::RetrieveRequestedAttrs メソッドの呼び出し時に TS_ATTRVAL 構造体の varValue メンバーに格納されます。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
paPos が無効です。

解説(Remarks)

「This is italic text.」という文では、italic 属性は単語 italic の前で開始し、単語 text の後で終了します。

dwFlagsTS_ATTR_FIND_WANT_END フラグが設定されている場合、「italic <anchor>normal」というテキストに対して、アンカー位置に終了の遷移があるため、メソッドは italic 属性を返します。

vtbl 18 HRESULT FindNextAttrTransition(IAnchor* paStart, IAnchor* paHalt, DWORD cFilterAttrs, GUID* paFilterAttrs, DWORD dwFlags, BOOL* pfFound, INT* plFoundOffset)

ITextStoreAnchor::FindNextAttrTransition メソッドは、属性値の遷移が発生するテキストストリーム内の位置を検索します。確認対象として指定する属性はアプリケーションに依存します。

paStartIAnchor*in属性の遷移を検索する範囲の開始位置にあるアンカーへのポインター。
paHaltIAnchor*in属性の遷移を検索する範囲の終了位置にあるアンカーへのポインター。
cFilterAttrsDWORDin確認する属性の数を指定します。
paFilterAttrsGUID*in確認する属性を指定する TS_ATTRID データ型へのポインター。定義済みの属性は tsattrs.h に記載されています。
dwFlagsDWORDin

属性の遷移を検索する方向を指定します。既定では、メソッドは前方に検索します。

意味
TS_ATTR_FIND_BACKWARDS
テキストストリーム内を後方に検索します。
TS_ATTR_FIND_UPDATESTART
属性の遷移が見つかった場合、入力アンカー paStart をその次の属性遷移位置に配置します。見つからない場合、入力アンカーは変更されません。
TS_ATTR_FIND_WANT_OFFSET
plFoundOffset パラメーターが、paStart からの属性遷移の文字オフセットを受け取ります。
pfFoundBOOL*out属性の遷移が見つかった場合は TRUE、見つからなかった場合は FALSE のブール値を受け取ります。
plFoundOffsetINT*out開始アンカー paStart からの属性遷移の文字オフセットを受け取ります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
paStart または paHalt が無効です。
TS_E_INVALIDPOS
指定された文字位置がドキュメント内のテキストの範囲を超えています。
vtbl 19 HRESULT RetrieveRequestedAttrs(DWORD ulCount, TS_ATTRVAL* paAttrVals, DWORD* pcFetched)

ITextStoreAnchor::RetrieveRequestedAttrs メソッド

ulCountDWORDin取得するサポート対象属性の数を指定します。
paAttrValsTS_ATTRVAL*outサポートされる属性を受け取る TS_ATTRVAL 構造体へのポインター。この構造体のメンバーは、呼び出し元メソッドの dwFlags パラメーターによって異なります。
pcFetchedDWORD*outサポートされる属性の数を受け取ります。

戻り値

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

説明
S_OK
メソッドは成功しました。
vtbl 20 HRESULT GetStart(IAnchor** ppaStart)

ITextStoreAnchor::GetStart メソッドは、テキストストリームの先頭に位置するアンカーを返します。

ppaStartIAnchor**outテキストストリームの先頭にあるアンカーオブジェクトへのポインター。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppaStart が無効です。
E_OUTOFMEMORY
テキストストリームの先頭にアンカーを生成できませんでした。
vtbl 21 HRESULT GetEnd(IAnchor** ppaEnd)

ITextStoreAnchor::GetEnd メソッドは、テキストストリームの末尾に位置するアンカーを返します。

ppaEndIAnchor**outテキストストリームの最後尾にあるアンカーオブジェクトへのポインター。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppaEnd が無効です。
E_NOTIMPL
アプリケーションがこのメソッドを実装していません。これは通常、終了位置の算出に過大なリソースが必要であることを示します。終了位置が必要な場合は、ITextStoreAnchor::GetText を使用して算出できますが、これもディスクから任意の大きさのメモリをページインする、メモリを大量に消費する操作になる可能性があります。
E_OUTOFMEMORY
ドキュメントの末尾にアンカーを生成できませんでした。
TS_E_NOLOCK
呼び出し側が読み取り専用ロックを保持していません。
vtbl 22 HRESULT GetActiveView(DWORD* pvcView)

ITextStoreAnchor::GetActiveView メソッドは、現在のアクティブなビューを示す TsViewCookie データ型を返します。TSF はアクティブなビューを 1 つしかサポートしないため、特定のテキストストアは常に同じ TsViewCookie データ型を返す必要があります。

pvcViewDWORD*out現在のアクティブなビューを示す TsViewCookie データ型を受け取ります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pvcView が無効です。
vtbl 23 HRESULT GetAnchorFromPoint(DWORD vcView, POINT* ptScreen, DWORD dwFlags, IAnchor** ppaSite)

ITextStoreAnchor::GetAnchorFromPoint メソッドは、スクリーン座標の点を、対応する位置に配置されたアンカーに変換します。

vcViewDWORDinコンテキストのビューを指定します。
ptScreenPOINT*in点のスクリーン座標を格納した POINT 構造体へのポインター。
dwFlagsDWORDin

文字の境界ボックスに対する点のスクリーン座標に基づいて、返すアンカー位置を指定します。既定では、返されるアンカー位置は、その点のスクリーン座標を含む文字の境界ボックスです。点が文字の境界ボックスの外にある場合、メソッドは NULL または TF_E_INVALIDPOINT を返します。このパラメーターに指定できる他のビットフラグは次のとおりです。

ビットフラグは組み合わせて指定できます。

意味
GXFPF_ROUND_NEAREST
点のスクリーン座標が文字の境界ボックス内に含まれる場合、その点のスクリーン座標に最も近い境界の端にアンカーを返します。
GXFPF_NEAREST
点のスクリーン座標が文字の境界ボックス内に含まれない場合、最も近い文字位置のアンカーを返します。
ppaSiteIAnchor**outスクリーン座標 ptScreen に対応する位置にあるアンカーオブジェクトへのポインター。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
メソッドは失敗しました。
E_INVALIDARG
1 つ以上の入力パラメーターが無効です。
E_OUTOFMEMORY
指定された位置にアンカーを生成できませんでした。
TS_E_INVALIDPOINT
ptScreen パラメーターがどの文字の境界ボックスにも含まれていません。
TS_E_NOLAYOUT
アプリケーションがまだテキストレイアウトを算出していません。

解説(Remarks)

Point 1 is in character bounding box and point 2 is outside the character bounding box. 点 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

点 2
vtbl 24 HRESULT GetTextExt(DWORD vcView, IAnchor* paStart, IAnchor* paEnd, RECT* prc, BOOL* pfClipped)

ITextStoreAnchor::GetTextExt メソッドは、テキスト範囲(レンジ)の境界ボックスをスクリーン座標で返します。呼び出し側は、このメソッドを呼び出す前にドキュメントの読み取り専用ロックを取得しておく必要があります。

vcViewDWORDinコンテキストのビューを指定します。
paStartIAnchor*in範囲の先頭に位置するアンカーを指定します。
paEndIAnchor*in範囲の末尾に位置するアンカーを指定します。
prcRECT*outテキスト範囲の境界ボックスをスクリーン座標で受け取ります。
pfClippedBOOL*out境界ボックス内のテキストがクリップされているかどうかを示すブール値を受け取ります。TRUE の場合、境界ボックスにはクリップされたテキストが含まれ、要求されたテキスト範囲全体は含まれません。要求された範囲が表示されていないため、境界ボックスがクリップされています。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
開始アンカーまたは終了アンカーの有効なインターフェイスポインターを取得できませんでした。
TS_E_INVALIDARG
1 つ以上の入力パラメーターが無効です。
TS_E_INVALIDPOS
paStart および paEnd パラメーターで指定された範囲が、ドキュメントの先頭または末尾を越えています。
TS_E_NOLAYOUT
アプリケーションがテキストレイアウトを算出していません。アプリケーションが ITextStoreAnchorSink::OnLayoutChange を呼び出すまで、以降の呼び出しは成功しません。
TS_E_NOLOCK
呼び出し側がドキュメントの読み取り専用ロックを保持していません。

解説(Remarks)

ドキュメントのウィンドウが最小化されている場合、または指定されたテキストが現在表示されていない場合、メソッドは prc パラメーターを {0,0,0,0} に設定して S_OK を返します。

vtbl 25 HRESULT GetScreenExt(DWORD vcView, RECT* prc)

ITextStoreAnchor::GetScreenExt メソッドは、テキストストリームが描画される表示面の境界ボックスをスクリーン座標で返します。

vcViewDWORDinコンテキストのビューを指定します。
prcRECT*outドキュメントの表示面の境界ボックスをスクリーン座標で受け取ります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
指定された vcView パラメーターが無効です。

解説(Remarks)

ドキュメントのウィンドウが最小化されている場合など、テキストが現在表示されていない場合、prc パラメーターは { 0, 0, 0, 0 } に設定されます。

vtbl 26 HRESULT GetWnd(DWORD vcView, HWND* phwnd)

ITextStoreAnchor::GetWnd メソッドは、現在のテキストストリームに対応するウィンドウのハンドルを返します。

vcViewDWORDin現在のドキュメントに対応する TsViewCookie データ型を指定します。
phwndHWND*out現在のドキュメントに対応するウィンドウのハンドルへのポインターを受け取ります。ドキュメントに対応するウィンドウハンドルがない場合、このパラメーターは NULL になることがあります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
TsViewCookie データ型が無効です。

解説(Remarks)

ドキュメントがメモリ上に存在するが画面に表示されていない場合、またはドキュメントがウィンドウレスコントロールであり、そのコントロールがウィンドウレスコントロールの所有者のウィンドウハンドルを認識していない場合、ドキュメントに対応するウィンドウハンドルが存在しないことがあります。呼び出し側は、メソッドが成功した場合でも phwnd パラメーターが非 NULL の値を受け取ると想定してはなりません。呼び出し側は phwnd パラメーターとして NULL を受け取ることもあります。

vtbl 27 HRESULT QueryInsertEmbedded(GUID* pguidService, FORMATETC* pFormatEtc, BOOL* pfInsertable)

ITextStoreAnchor::QueryInsertEmbedded メソッド

pguidServiceGUID*inオブジェクトの種類へのポインター。NULL の場合は pFormatEtc を使用します。
pFormatEtcFORMATETC*inオブジェクトの形式データを格納する FORMATETC 構造体へのポインター。pguidService パラメーターが NULL の場合、このパラメーターを NULL にすることはできません。
pfInsertableBOOL*outそのオブジェクトの種類をドキュメントに挿入できる場合は TRUE、挿入できない場合は FALSE を受け取ります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pFormatEtc パラメーターが NULL です。

解説(Remarks)

ドキュメントがサポートするクリップボード形式は、アプリケーションに依存します。

vtbl 28 HRESULT InsertTextAtSelection(DWORD dwFlags, LPWSTR pchText, DWORD cch, IAnchor** ppaStart, IAnchor** ppaEnd)

ITextStoreAnchor::InsertTextAtSelection メソッド

dwFlagsDWORDin

paStart および paEnd パラメーターにテキスト挿入の結果を格納するかどうかを指定します。

TF_IAS_NOQUERY フラグと TF_IAS_QUERYONLY フラグは組み合わせられません。

意味
TF_IAS_NOQUERY
テキストが挿入され、ppaStart および ppaEnd パラメーターの値は NULL にできます。テキスト挿入の結果が不要な場合にこのフラグを使用します。
TF_IAS_QUERYONLY
テキストは挿入されず、ppaStart および ppaEnd のアンカーがテキスト挿入の結果を格納します。これらのパラメーターの値は、アプリケーションがドキュメントへのテキスト挿入をどのように実装しているかによって異なります。実際にテキストを挿入せずに挿入結果を確認したい場合にこのフラグを使用します。長さ 0 のテキストも挿入できます。
pchTextLPWSTRinドキュメントに挿入する文字列へのポインター。文字列は NULL 終端でもかまいません。
cchDWORDinテキストの長さを指定します。
ppaStartIAnchor**outテキスト挿入の開始位置にあるアンカーオブジェクトへのポインター。
ppaEndIAnchor**outテキスト挿入の終了位置にあるアンカーオブジェクトへのポインター。挿入ポイントの場合、このパラメーターの値は ppaStart パラメーターの値と同じになります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
アンカー paStart または paEnd のいずれかを生成できませんでした。
E_INVALIDARG
pchText パラメーターが無効です。
TS_E_NOLOCK
呼び出し側がドキュメントのロックを保持していません。
vtbl 29 HRESULT InsertEmbeddedAtSelection(DWORD dwFlags, IDataObject* pDataObject, IAnchor** ppaStart, IAnchor** ppaEnd)

ITextStoreAnchor::InsertEmbeddedAtSelection メソッドは、挿入ポイントまたは選択範囲に IDataObject オブジェクトを挿入します。このメソッドを呼び出すクライアントは、テキストストリームに IDataObject を挿入する前に読み取り/書き込みロックを取得しておく必要があります。

dwFlagsDWORDin

paStart および paEnd パラメーターにオブジェクト挿入の結果を格納するかどうかを指定します。

TF_IAS_NOQUERY フラグと TF_IAS_QUERYONLY フラグは組み合わせられません。

意味
TF_IAS_NOQUERY
テキストが挿入され、ppaStart および ppaEnd パラメーターの値は NULL にできます。テキスト挿入の結果が不要な場合にこのフラグを使用します。
TF_IAS_QUERYONLY
テキストは挿入されず、ppaStart および ppaEnd のアンカーがテキスト挿入の結果を格納します。これらのパラメーターの値は、アプリケーションがドキュメントへのテキスト挿入をどのように実装しているかによって異なります。

実際にテキストを挿入せずに挿入結果を確認したい場合、たとえば選択範囲の折りたたみやその他の調整の結果を予測したい場合に、このフラグを使用します。

pDataObjectIDataObject*in挿入する IDataObject オブジェクトへのポインター。
ppaStartIAnchor**outオブジェクト挿入の開始位置にあるアンカーオブジェクトへのポインター。
ppaEndIAnchor**outオブジェクト挿入の終了位置にあるアンカーオブジェクトへのポインター。挿入ポイントの場合、このパラメーターの値は ppaStart パラメーターの値と同じになります。

戻り値

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

説明
S_OK
メソッドは成功しました。
E_FAIL
アンカー paStart または paEnd のいずれかを生成できませんでした。
E_INVALIDARG
pchText パラメーターが無効です。
E_OUTOFMEMORY
アンカー paStart または paEnd のいずれかを生成できませんでした。
TS_E_NOLOCK
呼び出し側がドキュメントのロックを保持していません。

解説(Remarks)

TS_CHAR_EMBEDDED 定数は ITextStoreAnchor::SetText に渡せないため、クライアントはテキストストリームにオブジェクトを挿入する際に必ずこのメソッドを使用する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。