2 using System.Reflection;
\r
3 using System.Runtime.InteropServices;
\r
4 using System.Runtime.InteropServices.ComTypes;
\r
5 using System.Security;
\r
6 using DotNetTextStore.UnmanagedAPI.WinDef;
\r
9 namespace DotNetTextStore.UnmanagedAPI.TSF.TextStore
\r
12 /// ITextStoreACP::RequestLock() で使用されるロックのフラグ。
\r
14 public enum LockFlags
\r
23 TS_LF_READWRITE = 6,
\r
25 /// 同期ロック。その他のフラグと組み合わせて使用する。
\r
36 /// TS_STATUS 構造体の dynamicFlags メンバで使用されるフラグ
\r
38 public enum DynamicStatusFlags
\r
52 /// TS_STATUS 構造体の staticFlags メンバで使用するフラグ。
\r
54 public enum StaticStatusFlags
\r
57 /// ドキュメントは複数選択をサポートしている。
\r
59 TS_SS_DISJOINTSEL = 1,
\r
61 /// 隠しテキストを含めることはない。
\r
63 TS_SS_NOHIDDENTEXT = 8,
\r
65 /// ドキュメントは複数のリージョンを含められる。
\r
69 /// ドキュメントは短い使用サイクルを持つ。
\r
71 TS_SS_TRANSITORY = 4,
\r
73 /// ドキュメントはタッチキーボードによるオートコレクションをサポートしている
\r
75 TS_SS_TKBAUTOCORRECTENABLE = 0x10,
\r
77 /// ドキュメントはタッチキーボードによる予測入力に対応している
\r
79 TS_SS_TKBPREDICTIONENABLE = 0x20
\r
84 /// ドキュメントのステータスを示す構造体。ITextStoreACP::GetStatus() で使用される。
\r
86 [StructLayout(LayoutKind.Sequential, Pack=4),
\r
87 Guid("BC7D979A-846A-444D-AFEF-0A9BFA82B961")
\r
89 public struct TS_STATUS
\r
94 public DynamicStatusFlags dynamicFlags;
\r
96 /// 実行時に変更できない一貫性をもつフラグ。
\r
98 public StaticStatusFlags staticFlags;
\r
103 /// ITextStoreACP::SetText() で使用されるフラグ。
\r
106 public enum SetTextFlags
\r
109 /// 既存のコンテントの移動(訂正)であり、特別なテキストマークアップ情報
\r
110 /// (メタデータ: .wav ファイルデータや言語IDなど)が保持される。クライア
\r
111 /// ントは保持されるマークアップ情報のタイプを定義する。
\r
113 TS_ST_CORRECTION = 1
\r
118 /// ITextStoreACP::AdviseSink() メソッドに渡されるフラグ。要求する変更通知
\r
121 public enum AdviseFlags
\r
124 /// ドキュメントの属性が変更された。
\r
126 TS_AS_ATTR_CHANGE = 8,
\r
128 /// ドキュメントのレイアウトが変更された。
\r
130 TS_AS_LAYOUT_CHANGE = 4,
\r
132 /// テキストはドキュメント内で選択された。
\r
134 TS_AS_SEL_CHANGE = 2,
\r
136 /// ドキュメントのステータスが変更された。
\r
138 TS_AS_STATUS_CHANGE = 0x10,
\r
140 /// テキストはドキュメント内で変更された。
\r
142 TS_AS_TEXT_CHANGE = 1
\r
149 [StructLayout(LayoutKind.Sequential, Pack=4),
\r
150 Guid("C4B9C33B-8A0D-4426-BEBE-D444A4701FE9")
\r
152 public struct TS_SELECTION_ACP
\r
163 /// スタイル。選択範囲の開始位置が終了位置なのか開始位置なのか示すフラ
\r
164 /// グの ase と仮決定を示す真偽値 interimChar を持つ。
\r
166 public TS_SELECTIONSTYLE style;
\r
171 /// TS_SELECTION_ACP のメンバとして使用される構造体。
\r
173 [StructLayout(LayoutKind.Sequential, Pack=4),
\r
174 Guid("7ECC3FFA-8F73-4D91-98ED-76F8AC5B1600")
\r
176 public struct TS_SELECTIONSTYLE
\r
179 /// 選択範囲の開始位置が終了位置なのか開始位置なのか示す
\r
181 public TsActiveSelEnd ase;
\r
183 /// 用途不明。説明を見ると変換中の文字のことのようだが変換中の文字に対
\r
184 /// しても true が渡されたことは無い・・・
\r
186 [MarshalAs(UnmanagedType.Bool)]
\r
187 public bool interimChar;
\r
192 /// 選択範囲の終了位置を示すフラグ。
\r
194 public enum TsActiveSelEnd
\r
201 /// 開始位置が選択範囲の終了位置である。
\r
205 /// 終了位置と選択範囲の終了位置は同じである。
\r
212 /// ITextStoreACP.FindNextAttrTransition() などで使用されるフラグ。
\r
215 public enum AttributeFlags
\r
220 TS_ATTR_FIND_BACKWARDS = 1,
\r
224 TS_ATTR_FIND_HIDDEN = 0x20,
\r
228 TS_ATTR_FIND_UPDATESTART = 4,
\r
232 TS_ATTR_FIND_WANT_END = 0x10,
\r
234 /// o_foundOffset パラメータは i_start からの属性変更のオフセットを受け取る。
\r
236 TS_ATTR_FIND_WANT_OFFSET = 2,
\r
240 TS_ATTR_FIND_WANT_VALUE = 8
\r
245 /// ITextStoreACP::InsertEmbedded() で使用されるフラグ
\r
248 public enum InsertEmbeddedFlags
\r
251 /// 既存のコンテントの移動(訂正)であり、特別なテキストマークアップ情報
\r
252 /// (メタデータ: .wav ファイルデータや言語IDなど)が保持される。クライア
\r
253 /// ントは保持されるマークアップ情報のタイプを定義する。
\r
255 TS_IE_CORRECTION = 1
\r
260 /// ITextStoreACP::InsertTextAtSelection(),
\r
261 /// ITextStoreACP::InsertEmbeddedAtSelection() で使用されるフラグ。
\r
264 public enum InsertAtSelectionFlags
\r
267 /// テキストは挿入され、挿入後の開始位置・終了位置を受け取るパラメータ
\r
268 /// の値は NULL にでき、TS_TEXTCHANGE 構造体は埋められなければいけない。
\r
269 /// このフラグはテキスト挿入の結果を見るために使用する。
\r
271 TF_IAS_NOQUERY = 1,
\r
273 /// テキストは実際には挿入されず、挿入後の開始位置・終了位置を受け取る
\r
274 /// パラメータはテキスト挿入の結果を含む。これらのパラメータの値は、
\r
275 /// アプリケーションがどのようにドキュメントにテキストを挿入するかに依
\r
276 /// 存している。このフラグは実際にはテキストを挿入しないでテキスト挿入
\r
277 /// の結果を見るために使用する。このフラグを使う場合はTS_TEXTCHANGE
\r
280 TF_IAS_QUERYONLY = 2
\r
287 public enum TsRunType
\r
298 /// アプリケーションや ITextStore インターフェイスを実装するテキスト
\r
299 /// サービスによるテキスト内の組み込まれたプライベートデータタイプ。
\r
308 [StructLayout(LayoutKind.Sequential, Pack=4),
\r
309 Guid("A6231949-37C5-4B74-A24E-2A26C327201D")
\r
311 public struct TS_RUNINFO
\r
320 public TsRunType type;
\r
325 /// 変更前および変更後の開始位置・終了位置を示す構造体。
\r
327 [StructLayout(LayoutKind.Sequential, Pack=4),
\r
328 Guid("F3181BD6-BCF0-41D3-A81C-474B17EC38FB")
\r
330 public struct TS_TEXTCHANGE
\r
333 /// テキストがドキュメントに挿入される前の開始位置。
\r
337 /// テキストがドキュメントに挿入される前の終了位置。値は挿入位置である
\r
338 /// start と同じ値となる。もし、start と異なっている場合は、テキストは
\r
339 /// テキストの挿入の前に選択されていた。
\r
343 /// テキストを挿入した後の終了位置。
\r
349 [StructLayout(LayoutKind.Sequential, Pack=8),
\r
350 Guid("2CC2B33F-1174-4507-B8D9-5BC0EB37C197")
\r
352 public struct TS_ATTRVAL
\r
354 public Guid attributeId;
\r
355 public int overlappedId;
\r
356 public int reserved;
\r
357 public VARIANT val;
\r
362 /// ITextStoreACP::GetACPFromPoint() で使用されるフラグ。
\r
364 /// <para>詳しくは http://msdn.microsoft.com/en-us/library/ms538418(v=VS.85).aspx の Remarks 参照。</para>
\r
367 public enum GetPositionFromPointFlags
\r
370 /// もし、スクリーン座標での点が文字バウンディングボックスに含まれてい
\r
371 /// ないなら、もっとも近い文字位置が返される。
\r
375 /// もし、スクリーン座標での点が文字バウンディングボックスの中に含まれ
\r
376 /// ている場合、返される文字位置は ptScreen にもっとも近いバウンディン
\r
377 /// グの端を持つ文字の位置である。
\r
379 GXFPF_ROUND_NEAREST = 1
\r
384 /// ITextStoreACPSink::OnTextChange() で使用されるフラグ。
\r
387 public enum OnTextChangeFlags
\r
390 TS_TC_CORRECTION = 1
\r
395 /// ITextStoreACPSink::OnLayoutChange() で使用されるフラグ。
\r
397 public enum TsLayoutCode
\r
415 /// GetSelection() の i_index 引数に使用する定数。
\r
417 public enum GetSelectionIndex : int
\r
422 TS_DEFAULT_SELECTION = -1
\r
426 //============================================================================
\r
430 /// テキストストアのメソッドの戻り値(C# では COMException のエラーコード)
\r
432 public static class TsResult
\r
435 /// Application does not support the data type contained in the IDataObject object to be inserted using ITextStoreACP::InsertEmbedded.
\r
437 public const int TS_E_FORMAT = unchecked((int)0x8004020a);
\r
439 /// Parameter is not within the bounding box of any character.
\r
441 public const int TS_E_INVALIDPOINT = unchecked((int)0x80040207);
\r
443 /// Range specified extends outside the document.
\r
445 public const int TS_E_INVALIDPOS = unchecked((int)0x80040200);
\r
447 /// Object does not support the requested interface.
\r
449 public const int TS_E_NOINTERFACE = unchecked((int)0x80040204);
\r
451 /// Application has not calculated a text layout.
\r
453 public const int TS_E_NOLAYOUT = unchecked((int)0x80040206);
\r
455 /// Application does not have a read-only lock or read/write lock for the document.
\r
457 public const int TS_E_NOLOCK = unchecked((int)0x80040201);
\r
459 /// Embedded content offset is not positioned before a TF_CHAR_EMBEDDED character.
\r
461 public const int TS_E_NOOBJECT = unchecked((int)0x80040202);
\r
463 /// Document has no selection.
\r
465 public const int TS_E_NOSELECTION = unchecked((int)0x80040205);
\r
467 /// Content cannot be returned to match the service GUID.
\r
469 public const int TS_E_NOSERVICE = unchecked((int)0x80040203);
\r
471 /// Document is read-only. Cannot modify content.
\r
473 public const int TS_E_READONLY = unchecked((int)0x80040209);
\r
475 /// Document cannot be locked synchronously.
\r
478 /// CAUTION: this value is marked as 0x00040300 in the document.
\r
480 public const int TS_E_SYNCHRONOUS = unchecked((int)0x00040208);
\r
482 /// Document successfully received an asynchronous lock.
\r
484 public const int TS_S_ASYNC = 0x01;
\r
486 /// COMCTL.h より。SINK をこれ以上登録できない。
\r
488 public const int CONNECT_E_ADVISELIMIT = -2147220991;
\r
490 /// COMCTL.h より。SINK は登録されていない。
\r
492 public const int CONNECT_E_NOCONNECTION = -2147220992;
\r
496 //============================================================================
\r
504 InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
\r
505 Guid("28888fe3-c2a0-483a-a3ea-8cb1ce51ff3d")
\r
507 public interface ITextStoreACP
\r
510 /// TSF マネージャのシンクインターフェイスを識別する。
\r
512 /// ITextStoreACP::AdviseSink() メソッドは ITextStoreACPSink インターフェイス
\r
513 /// から新しいアドバイズシンクをインストール、または既存のアドバイズシンクの
\r
514 /// 修正を行う。シンクインターフェイスは io_unknown_cp パラメータによって指定
\r
519 /// <param name="i_riid">
\r
520 /// シンクインターフェイスを指定する。
\r
523 /// <param name="i_unknown">
\r
524 /// シンクインターフェイスへのポインタ。NULL 不可。
\r
527 /// <param name="i_mask">
\r
528 /// アドバイズシンクを通知するイベントを指定する。
\r
529 /// <list type="table">
\r
531 /// <term>フラグ(値)</term>
\r
532 /// <description>コメント</description>
\r
535 /// <term>TS_AS_TEXT_CHANGE(0x1)</term>
\r
536 /// <description>テキストはドキュメント内で変更された。</description>
\r
539 /// <term>TS_AS_SEL_CHANGE(0x2)</term>
\r
540 /// <description>テキストはドキュメント内で選択された。</description>
\r
543 /// <term>TS_AS_LAYOUT_CHANGE(0x04)</term>
\r
544 /// <description>ドキュメントのレイアウトが変更された。</description>
\r
547 /// <term>TS_AS_ATTR_CHANGE(0x08)</term>
\r
548 /// <description>ドキュメントの属性が変更された。</description>
\r
551 /// <term>TS_AS_STATUS_CHANGE(0x10)</term>
\r
552 /// <description>ドキュメントのステータスが変更された。</description>
\r
555 /// <term>TS_AS_ALL_SINKS</term>
\r
556 /// <description>上記全て</description>
\r
561 [In] ref Guid i_riid,
\r
562 [In, MarshalAs(UnmanagedType.Interface)] object i_unknown,
\r
563 [In] AdviseFlags i_mask
\r
567 //====================================================================
\r
571 /// アプリケーションはもはやTSFマネージャから通知を必要としないことを示す
\r
572 /// ためにアプリケーションによって呼ばれる。TSFマネージャはシンクインター
\r
573 /// フェイスの解放と通知の停止を行う。
\r
576 /// <param name="i_unknown">
\r
577 /// シンクオブジェクトへのポインタ。NULL 不可。
\r
581 /// 新しいシンクオブジェクトを登録する ITextStoreACP::AdviseSink メソッド
\r
582 /// の全ての呼び出しは、このメソッドの呼び出しと対応していなければならない。
\r
583 /// 以前に登録されたシンクの dwMask パラメータを更新するだけの
\r
584 /// ITextStoreACP::AdviseSink() メソッドの呼び出しは
\r
585 /// ITextStoreACP::UnadviseSink() メソッドの呼び出しを必要としない。
\r
588 /// io_unknown_cp パラメータは ITextStoreACP::AdviseSink メソッドに渡さ
\r
589 /// れたオリジナルのポインタとして同じ COM 識別子でなければいけない。
\r
594 /// <list type="table">
\r
596 /// <term>戻り値</term>
\r
597 /// <description>意味</description>
\r
600 /// <term>S_OK</term>
\r
601 /// <description>メソッドは成功した。</description>
\r
604 /// <term>CONNECT_E_NOCONNECTION</term>
\r
606 /// アクティブなシンクオブジェクトは存在しない。
\r
612 [In, MarshalAs(UnmanagedType.Interface)] object i_unknown
\r
616 //====================================================================
\r
620 /// TSFマネージャがドキュメントを修正するためにドキュメントロックを提供す
\r
621 /// るためにTSFマネージャによって呼び出される。このメソッドはドキュメント
\r
622 /// ロックを作成するために ITextStoreACPSink::OnLockGranted() メソッドを呼
\r
626 /// <param name="i_lockFlags">ロック要求のタイプを指定する。
\r
627 /// <list type="table">
\r
629 /// <term>フラグ</term>
\r
630 /// <description>意味</description>
\r
633 /// <term>TS_LF_READ</term>
\r
635 /// ドキュメントは読取専用ロックで、修正はできない。
\r
639 /// <term>TS_LF_READWRITE</term>
\r
641 /// ドキュメントは読み書き両用で、修正できる。
\r
645 /// <term>TS_LF_SYNC</term>
\r
647 /// 他のフラグと一緒に指定された場合は、ドキュメントは同期ロックである。
\r
653 /// <param name="o_sessionResult">
\r
654 /// ロックリクエストが同期ならば、ロック要求の結果である
\r
655 /// ITextStoreACP::OnLockGranted() メソッドからの HRESULT を受け取る。
\r
658 /// ロック要求が非同期で結果が TS_S_ASYNC の場合、ドキュメントは非同期ロッ
\r
659 /// クを受け取る。ロック要求が非同期で結果が TS_E_SYNCHRONOUS の場合は、ド
\r
660 /// キュメントは非同期でロックできない。
\r
665 /// このメソッドはドキュメントをロックするために
\r
666 /// ITextStoreACPSink::OnLockGranted() メソッドを使用する。アプリケーショ
\r
667 /// ンは ITextStoreACP::RequestLock() メソッド内でドキュメントを修正したり
\r
668 /// ITextStoreACPSink::OnTextChange() メソッドを使用して変更通知を送ったり
\r
669 /// してはいけない。もし、アプリケーションがレポートするための変更をペンディ
\r
670 /// ングしているなら、アプリケーションは非同期ロック要求のみを返さなければ
\r
674 /// アプリケーションは複数の RequestLock() メソッド呼び出しをキューに入
\r
675 /// れることを試みてはいけない、なぜなら、アプリケーションは一つのコール
\r
676 /// バックのみを要求されるから。もし、呼び出し元がいくつかの読取要求や一
\r
677 /// つ以上の書き込み要求を作ったとしても、コールバックは書き込みアクセス
\r
682 /// 成功は、非同期ロックの要求にとって代わって同期ロックを要求する。失敗は
\r
683 /// (複数の)非同期ロックの要求を同期ロックに代えることができない。実装は、
\r
684 /// 要求が存在すれば発行済みの非同期要求をまだ満たしていなければいけない。
\r
688 /// もしロックが ITextStoreACP::RequestLock() メソッドが返る前に認められ
\r
689 /// たなら、o_sessionResult パラメータは
\r
690 /// ITextStoreACPSink::OnLockGranted() メソッドから返された HRESULT を受
\r
691 /// け取る。もし、呼び出しが成功したが、ロックは後で認められるなら、
\r
692 /// o_sessionResult パラメータは TS_S_ASYNC フラグを受け取る。もし、
\r
693 /// RequestLock() が S_OK 以外を返した場合は o_sessionResult パラメー
\r
698 /// ドキュメントが既にロックされている状態で、同期ロック要求の場合は
\r
699 /// o_sessionResult に TS_E_SYNCHRONOUS をセットして S_OK を返す。
\r
700 /// これは同期要求は認められなかったことを示す。
\r
701 /// ドキュメントが既にロックされている状態で、非同期ロック要求の場合は、
\r
702 /// アプリケーションはリクエストをキューに追加し、 o_sessionResult に
\r
703 /// TS_S_ASYNC をセットし、S_OK を返す。ドキュメントが有効になったとき、
\r
704 /// アプリケーションはリクエストをキューから削除して、 OnLockGranted()
\r
705 /// を呼び出す。このロックリクエストのキューは任意である。アプリケーション
\r
706 /// がサポートしなければいけないシナリオが一つある。ドキュメントが読み取
\r
707 /// り専用ロックで、アプリケーションが OnLockGranted の内部で新しい読み
\r
708 /// 書き両用の非同期ロック要求を出した場合、RequestLock は再帰呼び出しを
\r
709 /// 引き起こす。アプリケーションは OnLockGranted() を TS_LF_READWRITE と
\r
710 /// 共に呼び出してリクエストをアップグレードすべきである。
\r
714 /// 呼び出し元が読み取り専用ロックを維持している場合を除いて、呼び出し元
\r
715 /// はこのメソッドを再帰的に呼び出してはいけない。この場合、メソッドは非
\r
716 /// 同期に書き込み要求を尋ねるために再帰的に呼び出すことができる。書き込
\r
717 /// みロックは読取専用ロックが終わった後に認められるだろう。
\r
721 /// ロックの強要:アプリケーションは適切なロックのタイプが存在するかどうか
\r
722 /// ドキュメントへのアクセスを許す前に確かめなければいけない。例えば、
\r
723 /// GetText() を処理することを許可する前に少なくとも読み取り専用ロックが
\r
724 /// 行われているかどうか確かめなければいけない。もし、適切なロックがされ
\r
725 /// ていなければ、アプリケーションは TF_E_NOLOCK を返さなければいけない。
\r
729 [In] LockFlags i_lockFlags,
\r
730 [Out, MarshalAs(UnmanagedType.Error)] out int o_sessionResult
\r
734 //====================================================================
\r
738 /// ドキュメントのステータスを取得するために使用される。ドキュメントのステー
\r
739 /// タスは TS_STATUS 構造体を通して返される。
\r
742 /// <param name="o_documentStatus">
\r
743 /// ドキュメントのステータスを含む TS_STATUS 構造体を受け取る。NULL 不可。
\r
746 [Out] out TS_STATUS o_documentStatus
\r
750 //====================================================================
\r
754 /// ドキュメントが選択や挿入を許可することができるかどうかを決めるためにア
\r
758 /// QueryInsert() メソッドは指定した開始位置と終了位置が有効かどうかを決
\r
759 /// める。編集を実行する前にドキュメントの編集を調整するために使用される。
\r
760 /// メソッドはドキュメントの範囲外の値を返してはいけない。
\r
764 /// <param name="i_startIndex">
\r
768 /// <param name="i_endIndex">
\r
769 /// テキストを挿入する終了位置。選択中のテキストを置換する代わりに指定した
\r
770 /// 位置へテキストを挿入する場合は、この値は i_startIndex と同じになる。
\r
773 /// <param name="i_length">
\r
777 /// <param name="o_startIndex">
\r
778 /// 挿入されるテキストの新しい開始位置を返す。このパラメータが NULL の場合、
\r
779 /// テキストは指定された位置に挿入できない。この値はドキュメントの範囲外を
\r
783 /// <param name="o_endIndex">
\r
784 /// 挿入されるテキストの新しい終了位置を返す。このパラメータが NULL の場合、
\r
785 /// テキストは指定された位置に挿入できない。この値はドキュメントの範囲外を
\r
790 /// o_startIndex と o_endIndex の値は、アプリケーションがどのように
\r
791 /// ドキュメントにテキストを挿入するかに依存している。もし、o_startIndex
\r
792 /// と o_endIndex が i_startIndex と同じならば、カーソルは挿入後のテキ
\r
794 /// もし、o_startIndex と o_endIndex が i_endIndex と同じならば、
\r
795 /// カーソルは挿入後のテキストの終わりにある。o_startIndex と
\r
796 /// o_endIndex の差が挿入されたテキストの長さと同じなら、挿入後、挿入さ
\r
797 /// れたテキストはハイライトされている。
\r
800 [In] int i_startIndex,
\r
801 [In] int i_endIndex,
\r
803 [Out] out int o_startIndex,
\r
804 [Out] out int o_endIndex
\r
808 //====================================================================
\r
812 /// ドキュメント内のテキスト選択の位置を返す。このメソッドは複数テキスト選
\r
813 /// 択をサポートする。呼び出し元はこのメソッドを呼び出す前にドキュメントに
\r
814 /// 読取専用ロックをかけておかなければいけない。
\r
817 /// <param name="i_index">
\r
818 /// 処理を開始するテキスト選択を指定する。もし、TS_DEFAULT_SELECTION(-1)
\r
819 /// 定数が指定された場合、入力選択は処理を開始する。
\r
822 /// <param name="i_selectionBufferLength">
\r
826 /// <param name="o_selections">
\r
827 /// 選択されたテキストのスタイル、開始位置、終了位置を受け取る。これらの値
\r
828 /// は TS_SELECTION_ACP 構造体に出力される。
\r
831 /// <param name="o_fetchedLength">
\r
832 /// o_selections に返された構造体の数を受け取る。
\r
836 [In] int i_selectionBufferLength,
\r
837 [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] TS_SELECTION_ACP[] o_selections,
\r
838 out int o_fetchedLength
\r
842 //====================================================================
\r
846 /// ドキュメント内のテキストを選択する。アプリケーションはこのメソッドを呼
\r
847 /// ぶ前に読み書き両用ロックをかけなればいけない。
\r
850 /// <param name="i_count">
\r
851 /// i_selections 内のテキスト選択の数を指定する。
\r
854 /// <param name="i_selections">
\r
855 /// TS_SELECTION_ACP 構造体を通して選択されたテキストのスタイル、開始位置、
\r
859 /// 開始位置と終了位置が同じ場合は、指定した位置にキャレットを配置する。
\r
860 /// ドキュメント内に一度に一つのみキャレットを配置できる。
\r
865 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] TS_SELECTION_ACP[] i_selections
\r
869 //====================================================================
\r
873 /// 指定された位置のテキストに関する情報を返す。このメソッドは可視状態およ
\r
874 /// び不可視状態のテキストや埋め込まれたデータがテキストに関連付けられてい
\r
878 /// <param name="i_startIndex">
\r
882 /// <param name="i_endIndex">
\r
883 /// 終了位置を指定する。このパラメータが -1 の場合はテキストストア内の全て
\r
887 /// <param name="o_plainText">
\r
888 /// プレインテキストデータを受け取るバッファを指定する。このパラメータが
\r
889 /// NULL の場合は、 cchPlainReq は 0 でなければいけない。
\r
892 /// <param name="i_plainTextLength">
\r
893 /// プレインテキストの文字数を指定する。
\r
896 /// <param name="o_plainTextLength">
\r
897 /// プレインテキストバッファへコピーされた文字数を受け取る。このパラメータ
\r
898 /// は NULL を指定できない。値が必要でないときに使用する。
\r
901 /// <param name="o_runInfos">
\r
902 /// TS_RUNINFO 構造体の配列を受け取る。i_runInfoLength が 0 の場合は NULL。
\r
905 /// <param name="i_runInfoLength">
\r
906 /// o_runInfos の許容数を指定する。
\r
909 /// <param name="o_runInfoLength">
\r
910 /// o_runInfosに書き込まれた数を受け取る。このパラメータは NULL を指定で
\r
914 /// <param name="o_nextUnreadCharPos">
\r
915 /// 次の読み込んでいない文字の位置を受け取る。このパラメータは NULL を指定
\r
920 /// このメソッドを使う呼び出し元は ITextStoreACP::RequestLock() メソッドを
\r
921 /// 呼ぶことでドキュメントに読取専用ロックをかけなければいけない。ロックし
\r
922 /// ていない場合はメソッドは失敗し、TF_E_NOLOCK を返す。
\r
925 /// アプリケーションはまた、内部の理由によって戻り値を切り取ることができる。
\r
926 /// 呼び出し元は必須の戻り値を取得するために戻された文字やテキストのラン
\r
927 /// 数を注意深く調査しなければいけない。戻り値が不完全ならば、戻り値が完
\r
928 /// 全なものとなるまでメソッドを繰り返し呼び出さなければいけない。
\r
932 /// 呼び出し元は i_runInfoLength パラメータを0にセットし、o_runInfos
\r
933 /// パラメータを NULL にすることで、プレインテキストを要求できる。しかし
\r
934 /// ながら、呼び出し元は o_plainTextLength に非 NULL の有効な値を提
\r
935 /// 供しなければならない、パラメータを使用しないとしても。
\r
939 /// i_endIndex が -1 の場合、ストリームの最後がセットされたものとして処
\r
940 /// 理しなければいけない。その他の場合、0 以上でなければいけない。
\r
944 /// メソッドを抜ける際に、o_nextUnreadCharPos は戻り値によって参照
\r
945 /// されていないストリーム内の次の文字の位置をセットされていなければなら
\r
946 /// ない。呼び出し元はこれを使用して複数の GetText() 呼び出しで素早くテ
\r
952 [In] int i_startIndex,
\r
953 [In] int i_endIndex,
\r
954 [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=3)] char[] o_plainText,
\r
955 [In] int i_plainTextLength,
\r
956 [Out] out int o_plainTextLength,
\r
957 [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=6)] TS_RUNINFO[] o_runInfos,
\r
958 [In] int i_runInfoLength,
\r
959 [Out] out int o_runInfoLength,
\r
960 [Out] out int o_nextUnreadCharPos
\r
964 //====================================================================
\r
968 /// SetText() メソッドは与えられた文字位置のテキスト選択をセットする。
\r
971 /// <param name="i_flags">
\r
972 /// TS_ST_CORRECTION がセットされている場合、テキストは既存のコンテントの
\r
973 /// 移動(訂正)であり、特別なテキストマークアップ情報(メタデータ)が保持され
\r
974 /// る - .wav ファイルデータや言語IDなど。クライアントは保持されるマークアッ
\r
978 /// <param name="i_startIndex">
\r
979 /// 置換するテキストの開始位置を指定する。
\r
982 /// <param name="i_endIndex">
\r
983 /// 置換するテキストの終了位置を指定する。-1 の場合は無視される。
\r
986 /// <param name="i_text">
\r
987 /// 置き換えるテキストへのポインタを指定する。テキストの文字数は i_length
\r
988 /// パラメータによって指定されるため、テキスト文字列は NULL 終端文字を持っ
\r
992 /// <param name="i_length">
\r
996 /// <param name="o_textChange">
\r
997 /// 次のデータをもつ TS_TEXTCHANGE 構造体へのポインタ。
\r
999 /// <list type="table">
\r
1001 /// <term>メンバー名</term>
\r
1002 /// <description>意味</description>
\r
1005 /// <term>acpStart</term>
\r
1007 /// テキストがドキュメントに挿入される前の開始位置。
\r
1008 /// </description>
\r
1011 /// <term>acpOldEnd</term>
\r
1013 /// テキストがドキュメントに挿入される前の終了位置。値は挿入位置であ
\r
1014 /// る acpStart と同じ値となる。もし、acpStart と異なっている場合は、
\r
1015 /// テキストはテキストの挿入の前に選択されていた。
\r
1016 /// </description>
\r
1019 /// <term>acpNewEnd</term>
\r
1021 /// テキストを挿入した後の終了位置。
\r
1022 /// </description>
\r
1027 [In] SetTextFlags i_flags,
\r
1028 [In] int i_startIndex,
\r
1029 [In] int i_endIndex,
\r
1030 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=4)] char[] i_text,
\r
1031 [In] int i_length,
\r
1032 [Out] out TS_TEXTCHANGE o_textChange
\r
1036 //====================================================================
\r
1040 /// 指定されたテキスト文字列について Formatted Text データを返す。呼び
\r
1041 /// 出し元はこのメソッドを呼ぶ前に読み書き両用ロックをかけなければいけない。
\r
1043 void GetFormattedText(
\r
1046 [Out, MarshalAs(UnmanagedType.Interface)] out object o_obj
\r
1050 //====================================================================
\r
1054 /// 組み込みオブジェクトを取得する。
\r
1057 [In] int i_position,
\r
1058 [In] ref Guid i_guidService,
\r
1059 [In] ref Guid i_riid,
\r
1060 [Out, MarshalAs(UnmanagedType.Interface)] out object o_obj
\r
1064 //====================================================================
\r
1068 /// 組み込みオブジェクトを挿入できるか問い合わせる。
\r
1070 void QueryInsertEmbedded(
\r
1071 [In] ref Guid i_guidService,
\r
1072 [In] int i_formatEtc,
\r
1073 [Out, MarshalAs(UnmanagedType.Bool)] out bool o_insertable
\r
1077 //====================================================================
\r
1081 /// 組み込みオブジェクトを挿入する。
\r
1083 void InsertEmbedded(
\r
1084 [In] InsertEmbeddedFlags i_flags,
\r
1087 [In, MarshalAs(UnmanagedType.Interface)] object i_obj,
\r
1088 [Out] out TS_TEXTCHANGE o_textChange
\r
1092 //====================================================================
\r
1096 /// ITextStoreACP::InsertTextAtSelection() メソッドは挿入位置や選択位置に
\r
1097 /// テキストを挿入する。呼び出し元はテキストを挿入する前に読み書き両用ロッ
\r
1098 /// クをかけていなければならない。
\r
1101 /// <param name="i_flags">
\r
1102 /// o_startIndex, o_endIndex パラメータと TS_TEXTCHANGE 構造体のどち
\r
1103 /// らがテキストの挿入の結果を含んでいるかを示す。
\r
1104 /// TF_IAS_NOQUERY と TF_IAS_QUERYONLY フラグは同時に指定できない。
\r
1106 /// <list type="table">
\r
1108 /// <term>値</term>
\r
1109 /// <description>意味</description>
\r
1112 /// <term>0</term>
\r
1114 /// テキスト挿入が発生し、o_startIndex と o_endIndex パラメータ
\r
1115 /// はテキスト挿入の結果を含んでいる。TS_TEXTCHANGE 構造体は 0 で埋め
\r
1117 /// </description>
\r
1120 /// <term>TF_IAS_NOQUERY</term>
\r
1122 /// テキストは挿入され、o_startIndex と o_endIndex パラメータ
\r
1123 /// の値は NULL にでき、TS_TEXTCHANGE 構造体は埋められなければいけない。
\r
1124 /// このフラグはテキスト挿入の結果を見るために使用する。
\r
1125 /// </description>
\r
1128 /// <term>TF_IAS_QUERYONLY</term>
\r
1130 /// テキストは挿入されず、o_startIndex と o_endIndex パラメータ
\r
1131 /// はテキスト挿入の結果を含む。これらのパラメータの値は、アプリケー
\r
1132 /// ションがどのようにドキュメントにテキストを挿入するかに依存している。
\r
1133 /// 詳しくは注意を見ること。このフラグは実際にはテキストを挿入しない
\r
1134 /// でテキスト挿入の結果を見るために使用する。このフラグを使う場合は
\r
1135 /// TS_TEXTCHANGE 構造体を埋める必要はない。
\r
1136 /// </description>
\r
1141 /// <param name="i_text">
\r
1142 /// 挿入する文字列へのポインタ。NULL 終端にすることができる。
\r
1145 /// <param name="i_length">
\r
1149 /// <param name="o_startIndex">
\r
1150 /// テキスト挿入が発生した場所の開始位置へのポインタ。
\r
1153 /// <param name="o_endIndex">
\r
1154 /// テキスト挿入が発生した場所の終了位置へのポインタ。このパラメータは挿入
\r
1155 /// の場合、o_startIndex パラメータと同じ値になる。
\r
1158 /// <param name="o_textChange">
\r
1159 /// 次のメンバーを持つ TS_TEXTCHANGE 構造体へのポインタ。
\r
1161 /// <list type="table">
\r
1163 /// <term>メンバー名</term>
\r
1164 /// <description>意味</description>
\r
1167 /// <term>acpStart</term>
\r
1169 /// テキストがドキュメントに挿入される前の開始位置。
\r
1170 /// </description>
\r
1173 /// <term>acpOldEnd</term>
\r
1175 /// テキストがドキュメントに挿入される前の終了位置。値は挿入位置であ
\r
1176 /// る acpStart と同じ値となる。もし、acpStart と異なっている場合は、
\r
1177 /// テキストはテキストの挿入の前に選択されていた。
\r
1178 /// </description>
\r
1181 /// <term>acpNewEnd</term>
\r
1183 /// テキストを挿入した後の終了位置。
\r
1184 /// </description>
\r
1190 /// o_startIndex と o_endIndex パラメータの値はアプリケーションがド
\r
1191 /// キュメントにどのようにテキストを挿入したかによる。たとえば、アプリケー
\r
1192 /// ションがテキストを挿入後、挿入したテキストの開始位置にカーソルをセット
\r
1193 /// したなら、o_startIndex と o_endIndex パラメータは TS_TEXTCHANGE
\r
1194 /// 構造体の acpStart メンバと同じ値になる。
\r
1196 /// アプリケーションは ITextStoreACPSink::OnTextChange() メソッドをこの
\r
1197 /// メソッド内で呼ぶべきではない。
\r
1200 void InsertTextAtSelection(
\r
1201 [In] InsertAtSelectionFlags i_flags,
\r
1202 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)] char[] i_text,
\r
1203 [In] int i_length,
\r
1204 [Out] out int o_startIndex,
\r
1205 [Out] out int o_endIndex,
\r
1206 [Out] out TS_TEXTCHANGE o_textChange
\r
1210 //====================================================================
\r
1214 /// 選択位置もしくは挿入位置に組み込みオブジェクトを挿入する。
\r
1216 void InsertEmbeddedAtSelection(
\r
1217 InsertAtSelectionFlags flags,
\r
1218 [MarshalAs(UnmanagedType.Interface)] object obj,
\r
1221 out TS_TEXTCHANGE change
\r
1225 //====================================================================
\r
1229 /// ドキュメントのサポートされている属性を取得する。
\r
1232 /// <param name="i_flags">
\r
1233 /// 後続の ITextStoreACP::RetrieveRequestedAttrs() メソッド呼び出し
\r
1234 /// がサポートされる属性を含むかどうかを指定する。もし、
\r
1235 /// TS_ATTR_FIND_WANT_VALUE フラグが指定されたなら、後続の
\r
1236 /// ITextStoreAcp::RetrieveRequestedAttrs() 呼び出しの後に
\r
1237 /// TS_ATTRVAL 構造体のそれらはデフォルト属性の値になる。もし、他の
\r
1238 /// フラグが指定されたなら属性がサポートされているかどうか確認する
\r
1239 /// だけで、 TS_ATTRVAL 構造体の varValue メンバには VT_EMPTY がセッ
\r
1243 /// <param name="i_length">
\r
1244 /// 取得するサポートされる属性の数を指定する。
\r
1247 /// <param name="i_filterAttributes">
\r
1248 /// 確認するための属性が指定された TS_ATTRID データタイプへのポイン
\r
1249 /// タ。メソッドは TS_ATTRID によって指定された属性のみを返す(他の
\r
1250 /// 属性をサポートしていたとしても)。
\r
1252 void RequestSupportedAttrs(
\r
1253 [In] AttributeFlags i_flags,
\r
1254 [In] int i_length,
\r
1255 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] Guid[] i_filterAttributes
\r
1259 //====================================================================
\r
1263 /// 指定した文字位置の属性を取得する。
\r
1266 /// <param name="i_position">
\r
1270 /// <param name="i_length">
\r
1274 /// <param name="i_filterAttributes">
\r
1275 /// 確認するための属性が指定された TS_ATTRID データタイプへのポインタ。
\r
1278 /// <param name="i_flags">
\r
1281 void RequestAttrsAtPosition(
\r
1282 [In] int i_position,
\r
1283 [In] int i_length,
\r
1284 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] Guid[] i_filterAttributes,
\r
1285 [In] AttributeFlags i_flags
\r
1289 //====================================================================
\r
1293 /// 指定した文字位置の属性のリストを取得する。
\r
1295 /// <param name="i_position">ドキュメント内の開始位置。</param>
\r
1297 /// <param name="i_length">取得する属性の数。</param>
\r
1299 /// <param name="i_filterAttributes">
\r
1300 /// RetrieveRequestedAttr() メソッドを呼ぶための属性を指定する。
\r
1301 /// このパラメータがセットされていなければメソッドは指定された位置で
\r
1302 /// 始まる属性を返す。他の指定可能な値は以下のとおり。
\r
1303 /// <list type="table">
\r
1305 /// <term>値</term>
\r
1306 /// <description>意味</description>
\r
1309 /// <term>TS_ATTR_FIND_WANT_END</term>
\r
1311 /// 指定した文字位置で終了する属性を取得する。
\r
1312 /// </description>
\r
1315 /// <term>TS_ATTR_FIND_WANT_VALUD</term>
\r
1317 /// 属性の取得に加えて属性の値を取得する。属性値は
\r
1318 /// ITextStoreACP::RetrieveRequestedAttrs() メソッド呼び出しの
\r
1319 /// TS_ATTRVAL 構造体の varValue メンバにセットされる。
\r
1320 /// </description>
\r
1324 /// <param name="i_flags"></param>
\r
1325 void RequestAttrsTransitioningAtPosition(
\r
1326 [In] int i_position,
\r
1327 [In] int i_length,
\r
1328 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] Guid[] i_filterAttributes,
\r
1329 [In] AttributeFlags i_flags
\r
1333 //====================================================================
\r
1337 /// 属性変更が発生している場所の文字位置を決定する。
\r
1339 /// <param name="i_start">属性変更を検索する開始位置を指定する。</param>
\r
1340 /// <param name="i_halt">属性変更を検索する終了位置を指定する。</param>
\r
1341 /// <param name="i_length">チェックするための属性の数を指定する。</param>
\r
1342 /// <param name="i_filterAttributes">
\r
1343 /// チェックするための属性を指定する TS_ATTRID データタイプへのポインタ。
\r
1345 /// <param name="i_flags">
\r
1346 /// 検索方向を指定する。デフォルトではフォワード検索。
\r
1347 /// <list type="table">
\r
1349 /// <term>フラグ</term>
\r
1350 /// <description>意味</description>
\r
1354 /// <term>TS_ATTR_FIND_BACKWARDS</term>
\r
1355 /// <description>バックワード検索。</description>
\r
1358 /// <term>tS_ATTR_FIND_WANT_OFFSET</term>
\r
1360 /// o_foundOffset パラメータは i_start からの属性変更のオフセットを受け取る。
\r
1361 /// </description>
\r
1365 /// <param name="o_nextIndex">
\r
1366 /// 属性変更をチェックする次の文字位置を受け取る。
\r
1368 /// <param name="o_found">
\r
1369 /// 属性変更が発見された場合に TRUE を受け取る。そのほかは FALSE を受け取る。
\r
1371 /// <param name="o_foundOffset">
\r
1372 /// 属性変更の開始位置(文字位置ではない)を受け取る。TS_ATTR_FIND_WANT_OFFSET
\r
1373 /// フラグが dwFlags にセットされていれば、 acpStart からのオフセットを受け取る。
\r
1375 void FindNextAttrTransition(
\r
1378 [In] int i_length,
\r
1379 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)] Guid[] i_filterAttributes,
\r
1380 [In] AttributeFlags i_flags,
\r
1381 [Out] out int o_nextIndex,
\r
1382 [Out, MarshalAs(UnmanagedType.Bool)] out bool o_found,
\r
1383 [Out] out int o_foundOffset
\r
1387 //====================================================================
\r
1391 /// ITextStoreACP::RequestAttrsAtPosition(),
\r
1392 /// TextStoreACP::RequestAttrsTransitioningAtPosition(),
\r
1393 /// ITextStoreACP::RequestSupportedAttrs() によって取得された属性を返す。
\r
1395 /// <param name="i_length">取得するサポートされる属性の数を指定する。</param>
\r
1396 /// <param name="o_attributeVals">
\r
1397 /// サポートされる属性を受け取る TS_ATTRVAL 構造体へのポインタ。この
\r
1398 /// 構造体のメンバはメソッド呼び出しの i_flags パラメータによる。
\r
1400 /// <param name="o_fetchedLength">サポートされる属性の数を受け取る。</param>
\r
1401 void RetrieveRequestedAttrs(
\r
1402 [In] int i_length,
\r
1403 [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] TS_ATTRVAL[] o_attributeVals,
\r
1404 [Out] out int o_fetchedLength
\r
1408 //====================================================================
\r
1411 /// <summary>ドキュメント内の文字数を取得する。</summary>
\r
1413 /// <param name="o_length">最後の文字位置 + 1 を受け取る。</param>
\r
1415 [Out] out int o_length
\r
1419 //====================================================================
\r
1423 /// 現在のアクティブビューの TsViewCookie データタイプを返す。
\r
1425 void GetActiveView(
\r
1426 [Out] out int o_viewCookie
\r
1430 //====================================================================
\r
1434 /// スクリーン座標をアプリケーション文字位置に変換する。
\r
1436 /// <param name="i_viewCookie">コンテキストビューを指定する。</param>
\r
1437 /// <param name="i_point">スクリーン座標の位置を示す POINT 構造体へのポインタ。</param>
\r
1438 /// <param name="i_flags">
\r
1439 /// 文字バウンディングボックスからの相対位置に基づくスクリーン座標を
\r
1440 /// 戻すための文字位置を指定する。デフォルトでは、返される文字位置は
\r
1441 /// スクリーン座標を含む文字バウンディングボックスをもつ文字の位置で
\r
1442 /// ある。もし、ポイントが文字を囲むボックス外ならメソッドは NULL ま
\r
1443 /// たは TF_E_INVALIDPOINT を返す。その他のフラグは以下のとおり。
\r
1446 /// <term>フラグ</term>
\r
1447 /// <description>意味</description>
\r
1451 /// <term>GXFPF_ROUND_NEAREST</term>
\r
1453 /// もし、スクリーン座標での点が文字バウンディングボックスの中
\r
1454 /// に含まれている場合、返される文字位置は ptScreen にもっとも
\r
1455 /// 近いバウンディングの端を持つ文字の位置である。
\r
1456 /// </description>
\r
1459 /// <term>GXFPF_NEAREST</term>
\r
1461 /// もし、スクリーン座標での点が文字バウンディングボックスに含
\r
1462 /// まれていないなら、もっとも近い文字位置が返される。
\r
1464 /// http://msdn.microsoft.com/en-us/library/ms538418(v=VS.85).aspx の Remarks 参照。
\r
1466 /// </description>
\r
1470 /// <param name="o_index"></param>
\r
1471 void GetACPFromPoint(
\r
1472 [In] int i_viewCookie,
\r
1473 [In] ref POINT i_point,
\r
1474 [In] GetPositionFromPointFlags i_flags,
\r
1475 [Out] out int o_index
\r
1479 //====================================================================
\r
1483 /// 指定した文字位置のスクリーン座標を返す。読み取り専用ロックをかけて呼ば
\r
1487 /// <param name="i_viewCookie">
\r
1488 /// コンテキストビューを指定する。
\r
1491 /// <param name="i_startIndex">
\r
1492 /// ドキュメント内の取得するテキストの開始位置を指定する。
\r
1495 /// <param name="i_endIndex">
\r
1496 /// ドキュメント内の取得するテキストの終了位置を指定する。
\r
1499 /// <param name="o_rect">
\r
1500 /// 指定した文字位置のテキストのスクリーン座標でのバウンディングボックスを
\r
1504 /// <param name="o_isClipped">
\r
1505 /// バウンディングボックスがクリッピングされたかどうかを受け取る。TRUE の
\r
1506 /// 場合、バウンディングボックスはクリップされたテキストを含み、完全な要求
\r
1507 /// されたテキストの範囲を含んでいない。バウンディングボックスは要求された
\r
1508 /// 範囲が可視状態でないため、クリップされた。
\r
1512 /// ドキュメントウィンドウが最小化されていたり、指定されたテキストが現在表
\r
1513 /// 示されていないならば、メソッドは S_OK を返して o_rect パラメータに
\r
1514 /// { 0, 0, 0, 0 }をセットしなければいけない。
\r
1517 /// TSF マネージャー側から変換候補ウィンドウの表示位置を割り出すために使用
\r
1522 [In] int i_viewCookie,
\r
1523 [In] int i_startIndex,
\r
1524 [In] int i_endIndex,
\r
1525 [Out] out RECT o_rect,
\r
1526 [MarshalAs(UnmanagedType.Bool)] out bool o_isClipped
\r
1530 //====================================================================
\r
1534 /// テキストストリームが描画されるディスプレイサーフェイスのスクリーン座標
\r
1535 /// でのバウンディングボックスを取得する。
\r
1539 /// ドキュメントウィンドウが最小化されていたり、指定されたテキストが現在表
\r
1540 /// 示されていないならば、メソッドは S_OK を返して o_rect パラメータに
\r
1541 /// { 0, 0, 0, 0 }をセットしなければいけない。
\r
1543 void GetScreenExt(
\r
1544 [In] int i_viewCookie,
\r
1545 [Out] out RECT o_rect
\r
1549 //====================================================================
\r
1553 /// 現在のドキュメントに一致するウィンドウのハンドルを取得する。
\r
1556 /// <param name="i_viewCookie">
\r
1557 /// 現在のドキュメントに一致する TsViewCookie データタイプを指定する。
\r
1560 /// <param name="o_hwnd">
\r
1561 /// 現在のドキュメントに一致するウィンドウのハンドルへのポインタを受け取る。
\r
1562 /// 一致するウィンドウがなければ NULL にできる。
\r
1566 /// ドキュメントはメモリにあるが、スクリーンに表示されていない場合や、ウィ
\r
1567 /// ンドウがないコントロールや、ウィンドウがないコントロールのオーナーのウィ
\r
1568 /// ンドウハンドルを認識しない場合、ドキュメントは一致するウィンドウハンド
\r
1569 /// ルをもてない。呼び出し元は メソッドが成功したとしても o_hwnd パラメー
\r
1570 /// タに非 NULL 値を受け取ると想定してはいけない。
\r
1573 [In] int i_viewCookie,
\r
1574 [Out] out IntPtr o_hwnd
\r
1580 //============================================================================
\r
1585 InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
\r
1586 Guid("f86ad89f-5fe4-4b8d-bb9f-ef3797a84f1f")
\r
1588 public interface ITextStoreACP2
\r
1591 /// ITextStoreACP2::AdviseSink
\r
1593 /// <param name="i_riid"></param>
\r
1594 /// <param name="i_unknown"></param>
\r
1595 /// <param name="i_mask"></param>
\r
1597 [In] ref Guid i_riid,
\r
1598 [In, MarshalAs(UnmanagedType.Interface)] object i_unknown,
\r
1599 [In] AdviseFlags i_mask
\r
1602 /// ITextStoreACP2::UnadviseSink
\r
1604 /// <param name="i_unknown"></param>
\r
1605 void UnadviseSink(
\r
1606 [In, MarshalAs(UnmanagedType.Interface)] object i_unknown
\r
1609 /// ITextStoreACP2::RequestLock
\r
1611 /// <param name="i_lockFlags"></param>
\r
1612 /// <param name="o_sessionResult"></param>
\r
1614 [In] LockFlags i_lockFlags,
\r
1615 [Out, MarshalAs(UnmanagedType.Error)] out int o_sessionResult
\r
1618 /// ITextStoreACP2::GetStatus
\r
1620 /// <param name="o_documentStatus"></param>
\r
1622 [Out] out TS_STATUS o_documentStatus
\r
1625 /// ITextStoreACP2::QueryInsert
\r
1627 /// <param name="i_startIndex"></param>
\r
1628 /// <param name="i_endIndex"></param>
\r
1629 /// <param name="i_length"></param>
\r
1630 /// <param name="o_startIndex"></param>
\r
1631 /// <param name="o_endIndex"></param>
\r
1633 [In] int i_startIndex,
\r
1634 [In] int i_endIndex,
\r
1635 [In] int i_length,
\r
1636 [Out] out int o_startIndex,
\r
1637 [Out] out int o_endIndex
\r
1640 /// ITextStoreACP2::GetSelection
\r
1642 /// <param name="i_index"></param>
\r
1643 /// <param name="i_selectionBufferLength"></param>
\r
1644 /// <param name="o_selections"></param>
\r
1645 /// <param name="o_fetchedLength"></param>
\r
1646 void GetSelection(
\r
1648 [In] int i_selectionBufferLength,
\r
1649 [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] TS_SELECTION_ACP[] o_selections,
\r
1650 out int o_fetchedLength
\r
1653 /// ITextStoreACP2::SetSelection
\r
1655 /// <param name="i_count"></param>
\r
1656 /// <param name="i_selections"></param>
\r
1657 void SetSelection(
\r
1659 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] TS_SELECTION_ACP[] i_selections
\r
1662 /// ITextStoreACP2::GetText
\r
1664 /// <param name="i_startIndex"></param>
\r
1665 /// <param name="i_endIndex"></param>
\r
1666 /// <param name="o_plainText"></param>
\r
1667 /// <param name="i_plainTextLength"></param>
\r
1668 /// <param name="o_plainTextLength"></param>
\r
1669 /// <param name="o_runInfos"></param>
\r
1670 /// <param name="i_runInfoLength"></param>
\r
1671 /// <param name="o_runInfoLength"></param>
\r
1672 /// <param name="o_nextUnreadCharPos"></param>
\r
1674 [In] int i_startIndex,
\r
1675 [In] int i_endIndex,
\r
1676 [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] char[] o_plainText,
\r
1677 [In] int i_plainTextLength,
\r
1678 [Out] out int o_plainTextLength,
\r
1679 [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 6)] TS_RUNINFO[] o_runInfos,
\r
1680 [In] int i_runInfoLength,
\r
1681 [Out] out int o_runInfoLength,
\r
1682 [Out] out int o_nextUnreadCharPos
\r
1685 /// ITextStoreACP2::SetText
\r
1687 /// <param name="i_flags"></param>
\r
1688 /// <param name="i_startIndex"></param>
\r
1689 /// <param name="i_endIndex"></param>
\r
1690 /// <param name="i_text"></param>
\r
1691 /// <param name="i_length"></param>
\r
1692 /// <param name="o_textChange"></param>
\r
1694 [In] SetTextFlags i_flags,
\r
1695 [In] int i_startIndex,
\r
1696 [In] int i_endIndex,
\r
1697 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 4)] char[] i_text,
\r
1698 [In] int i_length,
\r
1699 [Out] out TS_TEXTCHANGE o_textChange
\r
1702 /// ITextStoreACP2::GetFormattedText
\r
1704 /// <param name="i_start"></param>
\r
1705 /// <param name="i_end"></param>
\r
1706 /// <param name="o_obj"></param>
\r
1707 void GetFormattedText(
\r
1710 [Out, MarshalAs(UnmanagedType.Interface)] out object o_obj
\r
1713 /// ITextStoreACP2::GetEmbedded
\r
1715 /// <param name="i_position"></param>
\r
1716 /// <param name="i_guidService"></param>
\r
1717 /// <param name="i_riid"></param>
\r
1718 /// <param name="o_obj"></param>
\r
1720 [In] int i_position,
\r
1721 [In] ref Guid i_guidService,
\r
1722 [In] ref Guid i_riid,
\r
1723 [Out, MarshalAs(UnmanagedType.Interface)] out object o_obj
\r
1726 /// ITextStoreACP2::QueryInsertEmbedded
\r
1728 /// <param name="i_guidService"></param>
\r
1729 /// <param name="i_formatEtc"></param>
\r
1730 /// <param name="o_insertable"></param>
\r
1731 void QueryInsertEmbedded(
\r
1732 [In] ref Guid i_guidService,
\r
1733 [In] int i_formatEtc,
\r
1734 [Out, MarshalAs(UnmanagedType.Bool)] out bool o_insertable
\r
1737 /// ITextStoreACP2::InsertEmbedded
\r
1739 /// <param name="i_flags"></param>
\r
1740 /// <param name="i_start"></param>
\r
1741 /// <param name="i_end"></param>
\r
1742 /// <param name="i_obj"></param>
\r
1743 /// <param name="o_textChange"></param>
\r
1744 void InsertEmbedded(
\r
1745 [In] InsertEmbeddedFlags i_flags,
\r
1748 [In, MarshalAs(UnmanagedType.Interface)] object i_obj,
\r
1749 [Out] out TS_TEXTCHANGE o_textChange
\r
1752 /// ITextStoreACP2::InsertTextAtSelection
\r
1754 /// <param name="i_flags"></param>
\r
1755 /// <param name="i_text"></param>
\r
1756 /// <param name="i_length"></param>
\r
1757 /// <param name="o_startIndex"></param>
\r
1758 /// <param name="o_endIndex"></param>
\r
1759 /// <param name="o_textChange"></param>
\r
1760 void InsertTextAtSelection(
\r
1761 [In] InsertAtSelectionFlags i_flags,
\r
1762 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] char[] i_text,
\r
1763 [In] int i_length,
\r
1764 [Out] out int o_startIndex,
\r
1765 [Out] out int o_endIndex,
\r
1766 [Out] out TS_TEXTCHANGE o_textChange
\r
1769 /// ITextStoreACP2::InsertEmbeddedAtSelection
\r
1771 /// <param name="flags"></param>
\r
1772 /// <param name="obj"></param>
\r
1773 /// <param name="start"></param>
\r
1774 /// <param name="end"></param>
\r
1775 /// <param name="change"></param>
\r
1776 void InsertEmbeddedAtSelection(
\r
1777 InsertAtSelectionFlags flags,
\r
1778 [MarshalAs(UnmanagedType.Interface)] object obj,
\r
1781 out TS_TEXTCHANGE change
\r
1784 /// ITextStoreACP2::RequestSupportedAttrs
\r
1786 /// <param name="i_flags"></param>
\r
1787 /// <param name="i_length"></param>
\r
1788 /// <param name="i_filterAttributes"></param>
\r
1789 void RequestSupportedAttrs(
\r
1790 [In] AttributeFlags i_flags,
\r
1791 [In] int i_length,
\r
1792 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] Guid[] i_filterAttributes
\r
1795 /// ITextStoreACP2::RequestAttrsAtPosition
\r
1797 /// <param name="i_position"></param>
\r
1798 /// <param name="i_length"></param>
\r
1799 /// <param name="i_filterAttributes"></param>
\r
1800 /// <param name="i_flags"></param>
\r
1801 void RequestAttrsAtPosition(
\r
1802 [In] int i_position,
\r
1803 [In] int i_length,
\r
1804 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] Guid[] i_filterAttributes,
\r
1805 [In] AttributeFlags i_flags
\r
1808 /// ITextStoreACP2::RequestAttrsTransitioningAtPosition
\r
1810 /// <param name="i_position"></param>
\r
1811 /// <param name="i_length"></param>
\r
1812 /// <param name="i_filterAttributes"></param>
\r
1813 /// <param name="i_flags"></param>
\r
1814 void RequestAttrsTransitioningAtPosition(
\r
1815 [In] int i_position,
\r
1816 [In] int i_length,
\r
1817 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] Guid[] i_filterAttributes,
\r
1818 [In] AttributeFlags i_flags
\r
1821 /// ITextStoreACP2::FindNextAttrTransition
\r
1823 /// <param name="i_start"></param>
\r
1824 /// <param name="i_halt"></param>
\r
1825 /// <param name="i_length"></param>
\r
1826 /// <param name="i_filterAttributes"></param>
\r
1827 /// <param name="i_flags"></param>
\r
1828 /// <param name="o_nextIndex"></param>
\r
1829 /// <param name="o_found"></param>
\r
1830 /// <param name="o_foundOffset"></param>
\r
1831 void FindNextAttrTransition(
\r
1834 [In] int i_length,
\r
1835 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] Guid[] i_filterAttributes,
\r
1836 [In] AttributeFlags i_flags,
\r
1837 [Out] out int o_nextIndex,
\r
1838 [Out, MarshalAs(UnmanagedType.Bool)] out bool o_found,
\r
1839 [Out] out int o_foundOffset
\r
1842 /// ITextStoreACP2::RetrieveRequestedAttrs
\r
1844 /// <param name="i_length"></param>
\r
1845 /// <param name="o_attributeVals"></param>
\r
1846 /// <param name="o_fetchedLength"></param>
\r
1847 void RetrieveRequestedAttrs(
\r
1848 [In] int i_length,
\r
1849 [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] TS_ATTRVAL[] o_attributeVals,
\r
1850 [Out] out int o_fetchedLength
\r
1853 /// ITextStoreACP2::GetEndACP
\r
1855 /// <param name="o_length"></param>
\r
1857 [Out] out int o_length
\r
1860 /// ITextStoreACP2::GetActiveView
\r
1862 /// <param name="o_viewCookie"></param>
\r
1863 void GetActiveView(
\r
1864 [Out] out int o_viewCookie
\r
1867 /// ITextStoreACP2::GetACPFromPoint
\r
1869 /// <param name="i_viewCookie"></param>
\r
1870 /// <param name="i_point"></param>
\r
1871 /// <param name="i_flags"></param>
\r
1872 /// <param name="o_index"></param>
\r
1873 void GetACPFromPoint(
\r
1874 [In] int i_viewCookie,
\r
1875 [In] ref POINT i_point,
\r
1876 [In] GetPositionFromPointFlags i_flags,
\r
1877 [Out] out int o_index
\r
1880 /// ITextStoreACP2::GetTextExt
\r
1882 /// <param name="i_viewCookie"></param>
\r
1883 /// <param name="i_startIndex"></param>
\r
1884 /// <param name="i_endIndex"></param>
\r
1885 /// <param name="o_rect"></param>
\r
1886 /// <param name="o_isClipped"></param>
\r
1888 [In] int i_viewCookie,
\r
1889 [In] int i_startIndex,
\r
1890 [In] int i_endIndex,
\r
1891 [Out] out RECT o_rect,
\r
1892 [MarshalAs(UnmanagedType.Bool)] out bool o_isClipped
\r
1895 /// ITextStoreACP2::GetScreenExt
\r
1897 /// <param name="i_viewCookie"></param>
\r
1898 /// <param name="o_rect"></param>
\r
1899 void GetScreenExt(
\r
1900 [In] int i_viewCookie,
\r
1901 [Out] out RECT o_rect
\r
1904 //============================================================================
\r
1908 /// コンポジション関連の通知を受け取るためにアプリケーション側で実装される
\r
1912 /// ITfDocumentMgr::CreateContext() が呼ばれた時に TSF マネージャは
\r
1913 /// ITextStoreACP に対してこのインターフェイスを問い合わせる。
\r
1917 Guid("5F20AA40-B57A-4F34-96AB-3576F377CC79"),
\r
1918 InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
\r
1920 public interface ITfContextOwnerCompositionSink
\r
1923 /// コンポジションが開始された時に TSF マネージャから呼ばれる。
\r
1926 /// <param name="i_view">
\r
1927 /// 新しいコンポジションを表す ITfCompositionView へのポインタ。
\r
1930 /// <param name="o_ok">
\r
1931 /// 新しいコンポジションを許可するかどうかを受け取る。true の
\r
1932 /// 場合はコンポジションを許可し、false の場合は許可しない。
\r
1934 void OnStartComposition(
\r
1935 [In] ITfCompositionView i_view,
\r
1936 [Out, MarshalAs(UnmanagedType.Bool)] out bool o_ok
\r
1941 /// 既存のコンポジションが変更された時に TSF マネージャから呼ばれる。
\r
1944 /// <param name="i_view">
\r
1945 /// 更新されるコンポジションを表す ITfCompositionView へのポインタ。
\r
1948 /// <param name="i_rangeNew">
\r
1949 /// コンポジションが更新された後にコンポジションがカバーするテキスト
\r
1950 /// の範囲を含む ITfRange へのポインタ。
\r
1952 void OnUpdateComposition(
\r
1953 [In] ITfCompositionView i_view,
\r
1954 [In] ITfRange i_rangeNew
\r
1959 /// コンポジションが終了した時に TSF マネージャから呼ばれる。
\r
1961 /// <param name="i_view">
\r
1962 /// 終了したコンポジションを表す ITfCompositionView へのポインタ。
\r
1964 void OnEndComposition(
\r
1965 [In] ITfCompositionView i_view
\r
1970 //============================================================================
\r
1974 /// ITextStoreACP::AdviseSink() で渡されるシンクのインターフェイス。
\r
1977 Guid("22d44c94-a419-4542-a272-ae26093ececf"),
\r
1978 InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
\r
1980 public interface ITextStoreACPSink
\r
1983 /// テキストが変更された時に呼び出される。
\r
1985 /// <param name="i_flags">追加情報を示すフラグ。</param>
\r
1986 /// <param name="i_change">テキスト変更データを含む TS_TEXTCHANGE データ。</param>
\r
1987 [SecurityCritical]
\r
1988 void OnTextChange(
\r
1989 [In] OnTextChangeFlags i_flags,
\r
1990 [In] ref TS_TEXTCHANGE i_change
\r
1995 /// ドキュメント内部で選択が変更された時に呼び出される。
\r
1997 [SecurityCritical]
\r
1998 void OnSelectionChange();
\r
2003 /// ドキュメントのレイアウトが変更された時に呼び出される。
\r
2006 /// <param name="i_layoutCode">変更のタイプを定義する値。</param>
\r
2007 /// <param name="i_viewCookie">ドキュメントを識別するアプリケーション定義のクッキー値。</param>
\r
2008 [SecurityCritical]
\r
2009 void OnLayoutChange(
\r
2010 [In] TsLayoutCode i_layoutCode,
\r
2011 [In] int i_viewCookie
\r
2016 /// ステータスが変更された時に呼び出される。
\r
2019 /// <param name="i_flags">新しいステータスフラグ。</param>
\r
2020 [SecurityCritical]
\r
2021 void OnStatusChange(
\r
2022 [In] DynamicStatusFlags i_flags
\r
2027 /// 一つ以上の属性が変更された時に呼び出される。
\r
2030 /// <param name="i_start">属性が変更されたテキストの開始位置。</param>
\r
2031 /// <param name="i_end">属性が変更されたテキストの終了位置。</param>
\r
2032 /// <param name="i_length">i_attributes パラメータの要素数。</param>
\r
2033 /// <param name="i_attributes">変更された属性を識別する値。</param>
\r
2034 [SecurityCritical]
\r
2035 void OnAttrsChange(
\r
2038 [In] int i_length,
\r
2039 [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)] Guid[] i_attributes
\r
2044 /// ITextStoreACP::RequestLock() でロックが成功した場合に呼び出される。
\r
2047 /// <param name="i_flags">ロックフラグ。</param>
\r
2049 /// <returns>HRESULT のエラーコード。</returns>
\r
2050 [PreserveSig, SecurityCritical]
\r
2051 int OnLockGranted(
\r
2052 [In] LockFlags i_flags
\r
2057 /// エディットトランザクションが開始された時に呼び出される。
\r
2060 /// エディットトランザクションは、一度に処理されるべきテキストの変更
\r
2061 /// のグループ。ITextStoreACPSink::OnStartEditTransaction() 呼び出し
\r
2062 /// は、テキストサービスに ITextStoreACPSink::OnEndEditTransaction()
\r
2063 /// が呼ばれるまで、テキストの変更通知をキューに入れさせることが
\r
2064 /// できる。ITextStoreACPSink::OnEndEditTransaction() が呼び出される
\r
2065 /// と、キューに入れられた変更通知はすべて処理される。
\r
2069 /// エディットトランザクションの実装は任意。
\r
2072 [SecurityCritical]
\r
2073 void OnStartEditTransaction();
\r
2077 /// エディットトランザクションが終了した時に呼び出される。
\r
2081 /// エディットトランザクションは、一度に処理されるべきテキストの変更
\r
2082 /// のグループ。ITextStoreACPSink::OnStartEditTransaction() 呼び出し
\r
2083 /// は、テキストサービスに ITextStoreACPSink::OnEndEditTransaction()
\r
2084 /// が呼ばれるまで、テキストの変更通知をキューに入れさせることが
\r
2085 /// できる。ITextStoreACPSink::OnEndEditTransaction() が呼び出される
\r
2086 /// と、キューに入れられた変更通知はすべて処理される。
\r
2090 /// エディットトランザクションの実装は任意。
\r
2092 [SecurityCritical]
\r
2093 void OnEndEditTransaction();
\r
2097 //============================================================================
\r
2100 [StructLayout(LayoutKind.Sequential, Pack=4),
\r
2101 Guid("E26D9E1D-691E-4F29-90D7-338DCF1F8CEF")
\r
2103 public struct TF_PERSISTENT_PROPERTY_HEADER_ACP
\r
2106 /// プロパティを識別する GUID。
\r
2108 public Guid guidOfType;
\r
2116 public int length;
\r
2120 public uint bytes;
\r
2122 /// プロパティオーナーによって定義された値。
\r
2124 public uint privateValue;
\r
2126 /// プロパティオーナーの CLSID。
\r
2128 public Guid clsidOfTip;
\r
2132 //============================================================================
\r
2136 /// アプリケーション側で実装し、TSF マネージャーがドキュメントを非同期に
\r
2137 /// ロードするために使用されるインターフェイス。
\r
2140 InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
\r
2141 Guid("4EF89150-0807-11D3-8DF0-00105A2799B5")
\r
2143 public interface ITfPersistentPropertyLoaderACP
\r
2146 /// プロパティをロードするときに使用される。
\r
2149 /// <param name="i_propertyHeader">
\r
2150 /// ロードするプロパティを識別する TF_PERSISTENT_PROPERTY_HEADER_ACP
\r
2154 /// <param name="o_stream">
\r
2155 /// ストリームオブジェクトの受け取り先。
\r
2157 void LoadProperty(
\r
2158 [In] ref TF_PERSISTENT_PROPERTY_HEADER_ACP i_propertyHeader,
\r
2159 [Out, MarshalAs(UnmanagedType.Interface)] out IStream o_stream
\r
2164 //============================================================================
\r
2168 /// ACP ベースのアプリケーションにいくつかの機能を提供するために TSF マ
\r
2169 /// ネージャーによって実装されるインターフェイス。
\r
2171 /// ITextStoreACP::AdviseSink() に渡されるシンクオブジェクトに
\r
2172 /// QueryInterface() をすることで得られる。
\r
2176 InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
\r
2177 Guid("AA80E901-2021-11D2-93E0-0060B067B86E")
\r
2179 public interface ITextStoreACPServices
\r
2182 /// ITfRange オブジェクトからプロパティを取得して、ストリームオブジェクトに
\r
2186 [In, MarshalAs(UnmanagedType.Interface)] ITfProperty i_property,
\r
2187 [In, MarshalAs(UnmanagedType.Interface)] ITfRange i_range,
\r
2188 [Out] out TF_PERSISTENT_PROPERTY_HEADER_ACP o_propertyHeader,
\r
2189 [In, MarshalAs(UnmanagedType.Interface)] IStream i_stream
\r
2194 /// 以前にシリアライズされたプロパティデータを取得してプロパティオブジェクトに
\r
2198 [In, MarshalAs(UnmanagedType.Interface)] ITfProperty i_property,
\r
2199 [In] ref TF_PERSISTENT_PROPERTY_HEADER_ACP i_propertyHeader,
\r
2200 [In, MarshalAs(UnmanagedType.Interface)] IStream i_stream,
\r
2201 [In, MarshalAs(UnmanagedType.Interface)] ITfPersistentPropertyLoaderACP i_loader
\r
2206 /// Forces all values of an asynchronously loaded property to be loaded.
\r
2208 void ForceLoadProperty(
\r
2209 [In, MarshalAs(UnmanagedType.Interface)] ITfProperty i_property
\r
2214 /// 終了位置と開始位置から ITfRangeACP を生成する。
\r
2216 /// <param name="i_startIndex">開始位置。</param>
\r
2217 /// <param name="i_endIndex">終了位置。</param>
\r
2218 /// <param name="o_range">ITfRangeACP の受け取り先。</param>
\r
2220 [In] int i_startIndex,
\r
2221 [In] int i_endIndex,
\r
2222 [Out, MarshalAs(UnmanagedType.Interface)] out ITfRangeACP o_range
\r