OSDN Git Service

インストーラーのパスを変更した
[fooeditengine/FooEditEngine.git] / Common / DotNetTextStore / UnmanagedAPI / TSF / TextStore.cs
1 using System;\r
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
7 \r
8 \r
9 namespace DotNetTextStore.UnmanagedAPI.TSF.TextStore\r
10 {\r
11     /// <summary>\r
12     /// ITextStoreACP::RequestLock() で使用されるロックのフラグ。\r
13     /// </summary>\r
14     public enum LockFlags\r
15     {\r
16         /// <summary>\r
17         /// 読み取り専用。\r
18         /// </summary>\r
19         TS_LF_READ = 2,\r
20         /// <summary>\r
21         /// 読み書き両用。\r
22         /// </summary>\r
23         TS_LF_READWRITE = 6,\r
24         /// <summary>\r
25         /// 同期ロック。その他のフラグと組み合わせて使用する。\r
26         /// </summary>\r
27         TS_LF_SYNC = 1,\r
28         /// <summary>\r
29         /// 書き込み用。\r
30         /// </summary>\r
31         TS_LF_WRITE = 4\r
32     }\r
33 \r
34 \r
35     /// <summary>\r
36     /// TS_STATUS 構造体の dynamicFlags メンバで使用されるフラグ\r
37     /// </summary>\r
38     public enum DynamicStatusFlags\r
39     {\r
40         /// <summary>\r
41         /// ドキュメントはロード中の状態。\r
42         /// </summary>\r
43         TS_SD_LOADING = 2,\r
44         /// <summary>\r
45         /// ドキュメントは読み取り専用。\r
46         /// </summary>\r
47         TS_SD_READONLY = 1\r
48     }\r
49 \r
50 \r
51     /// <summary>\r
52     /// TS_STATUS 構造体の staticFlags メンバで使用するフラグ。\r
53     /// </summary>\r
54     public enum StaticStatusFlags\r
55     {\r
56         /// <summary>\r
57         /// ドキュメントは複数選択をサポートしている。\r
58         /// </summary>\r
59         TS_SS_DISJOINTSEL = 1,\r
60         /// <summary>\r
61         /// 隠しテキストを含めることはない。\r
62         /// </summary>\r
63         TS_SS_NOHIDDENTEXT = 8,\r
64         /// <summary>\r
65         /// ドキュメントは複数のリージョンを含められる。\r
66         /// </summary>\r
67         TS_SS_REGIONS = 2,\r
68         /// <summary>\r
69         /// ドキュメントは短い使用サイクルを持つ。\r
70         /// </summary>\r
71         TS_SS_TRANSITORY = 4,\r
72         /// <summary>\r
73         /// ドキュメントはタッチキーボードによるオートコレクションをサポートしている\r
74         /// </summary>\r
75         TS_SS_TKBAUTOCORRECTENABLE = 0x10,\r
76         /// <summary>\r
77         /// ドキュメントはタッチキーボードによる予測入力に対応している\r
78         /// </summary>\r
79         TS_SS_TKBPREDICTIONENABLE = 0x20\r
80     }\r
81 \r
82 \r
83     /// <summary>\r
84     /// ドキュメントのステータスを示す構造体。ITextStoreACP::GetStatus() で使用される。\r
85     /// </summary>\r
86     [StructLayout(LayoutKind.Sequential, Pack=4),\r
87      Guid("BC7D979A-846A-444D-AFEF-0A9BFA82B961")\r
88     ]\r
89     public struct TS_STATUS\r
90     {\r
91         /// <summary>\r
92         /// 実行時に変更できる状態フラグ。\r
93         /// </summary>\r
94         public DynamicStatusFlags dynamicFlags;\r
95         /// <summary>\r
96         /// 実行時に変更できない一貫性をもつフラグ。\r
97         /// </summary>\r
98         public StaticStatusFlags staticFlags;\r
99     }\r
100 \r
101 \r
102     /// <summary>\r
103     /// ITextStoreACP::SetText() で使用されるフラグ。\r
104     /// </summary>\r
105     [Flags]\r
106     public enum SetTextFlags\r
107     {\r
108         /// <summary>\r
109         /// 既存のコンテントの移動(訂正)であり、特別なテキストマークアップ情報\r
110         /// (メタデータ: .wav ファイルデータや言語IDなど)が保持される。クライア\r
111         /// ントは保持されるマークアップ情報のタイプを定義する。\r
112         /// </summary>\r
113         TS_ST_CORRECTION = 1\r
114     }\r
115 \r
116 \r
117     /// <summary>\r
118     /// ITextStoreACP::AdviseSink() メソッドに渡されるフラグ。要求する変更通知\r
119     /// を組み合わせて使用する。\r
120     /// </summary>\r
121     public enum AdviseFlags\r
122     {\r
123         /// <summary>\r
124         /// ドキュメントの属性が変更された。\r
125         /// </summary>\r
126         TS_AS_ATTR_CHANGE = 8,\r
127         /// <summary>\r
128         /// ドキュメントのレイアウトが変更された。\r
129         /// </summary>\r
130         TS_AS_LAYOUT_CHANGE = 4,\r
131         /// <summary>\r
132         /// テキストはドキュメント内で選択された。\r
133         /// </summary>\r
134         TS_AS_SEL_CHANGE = 2,\r
135         /// <summary>\r
136         /// ドキュメントのステータスが変更された。\r
137         /// </summary>\r
138         TS_AS_STATUS_CHANGE = 0x10,\r
139         /// <summary>\r
140         /// テキストはドキュメント内で変更された。\r
141         /// </summary>\r
142         TS_AS_TEXT_CHANGE = 1\r
143     }\r
144 \r
145 \r
146     /// <summary>\r
147     /// 選択範囲を示す構造体。\r
148     /// </summary>\r
149     [StructLayout(LayoutKind.Sequential, Pack=4),\r
150      Guid("C4B9C33B-8A0D-4426-BEBE-D444A4701FE9")\r
151     ]\r
152     public struct TS_SELECTION_ACP\r
153     {\r
154         /// <summary>\r
155         /// 開始文字位置。\r
156         /// </summary>\r
157         public int start;\r
158         /// <summary>\r
159         /// 終了文字位置。\r
160         /// </summary>\r
161         public int end;\r
162         /// <summary>\r
163         /// スタイル。選択範囲の開始位置が終了位置なのか開始位置なのか示すフラ\r
164         /// グの ase と仮決定を示す真偽値 interimChar を持つ。\r
165         /// </summary>\r
166         public TS_SELECTIONSTYLE style;\r
167     }\r
168 \r
169 \r
170     /// <summary>\r
171     /// TS_SELECTION_ACP のメンバとして使用される構造体。\r
172     /// </summary>\r
173     [StructLayout(LayoutKind.Sequential, Pack=4),\r
174      Guid("7ECC3FFA-8F73-4D91-98ED-76F8AC5B1600")\r
175     ]\r
176     public struct TS_SELECTIONSTYLE\r
177     {\r
178         /// <summary>\r
179         /// 選択範囲の開始位置が終了位置なのか開始位置なのか示す\r
180         /// </summary>\r
181         public TsActiveSelEnd ase;\r
182         /// <summary>\r
183         /// 用途不明。説明を見ると変換中の文字のことのようだが変換中の文字に対\r
184         /// しても true が渡されたことは無い・・・\r
185         /// </summary>\r
186         [MarshalAs(UnmanagedType.Bool)]\r
187         public bool interimChar;\r
188     }\r
189 \r
190 \r
191     /// <summary>\r
192     /// 選択範囲の終了位置を示すフラグ。\r
193     /// </summary>\r
194     public enum TsActiveSelEnd\r
195     {\r
196         /// <summary>\r
197         /// アクティブな選択は無い。\r
198         /// </summary>\r
199         TS_AE_NONE,\r
200         /// <summary>\r
201         /// 開始位置が選択範囲の終了位置である。\r
202         /// </summary>\r
203         TS_AE_START,\r
204         /// <summary>\r
205         /// 終了位置と選択範囲の終了位置は同じである。\r
206         /// </summary>\r
207         TS_AE_END\r
208     }\r
209 \r
210 \r
211     /// <summary>\r
212     /// ITextStoreACP.FindNextAttrTransition() などで使用されるフラグ。\r
213     /// </summary>\r
214     [Flags]\r
215     public enum AttributeFlags\r
216     {\r
217         /// <summary>\r
218         /// バックワード検索。\r
219         /// </summary>\r
220         TS_ATTR_FIND_BACKWARDS = 1,\r
221         /// <summary>\r
222         /// 不明。資料なし。\r
223         /// </summary>\r
224         TS_ATTR_FIND_HIDDEN = 0x20,\r
225         /// <summary>\r
226         /// 不明。資料なし。\r
227         /// </summary>\r
228         TS_ATTR_FIND_UPDATESTART = 4,\r
229         /// <summary>\r
230         /// 不明。資料なし。\r
231         /// </summary>\r
232         TS_ATTR_FIND_WANT_END = 0x10,\r
233         /// <summary>\r
234         /// o_foundOffset パラメータは i_start からの属性変更のオフセットを受け取る。\r
235         /// </summary>\r
236         TS_ATTR_FIND_WANT_OFFSET = 2,\r
237         /// <summary>\r
238         /// 不明。資料なし。\r
239         /// </summary>\r
240         TS_ATTR_FIND_WANT_VALUE = 8\r
241     }\r
242 \r
243 \r
244     /// <summary>\r
245     /// ITextStoreACP::InsertEmbedded() で使用されるフラグ\r
246     /// </summary>\r
247     [Flags]\r
248     public enum InsertEmbeddedFlags\r
249     {\r
250         /// <summary>\r
251         /// 既存のコンテントの移動(訂正)であり、特別なテキストマークアップ情報\r
252         /// (メタデータ: .wav ファイルデータや言語IDなど)が保持される。クライア\r
253         /// ントは保持されるマークアップ情報のタイプを定義する。\r
254         /// </summary>\r
255         TS_IE_CORRECTION = 1\r
256     }\r
257 \r
258 \r
259     /// <summary>\r
260     /// ITextStoreACP::InsertTextAtSelection(),\r
261     /// ITextStoreACP::InsertEmbeddedAtSelection() で使用されるフラグ。\r
262     /// </summary>\r
263     [Flags]\r
264     public enum InsertAtSelectionFlags\r
265     {\r
266         /// <summary>\r
267         /// テキストは挿入され、挿入後の開始位置・終了位置を受け取るパラメータ\r
268         /// の値は NULL にでき、TS_TEXTCHANGE 構造体は埋められなければいけない。\r
269         /// このフラグはテキスト挿入の結果を見るために使用する。\r
270         /// </summary>\r
271         TF_IAS_NOQUERY = 1,\r
272         /// <summary>\r
273         /// テキストは実際には挿入されず、挿入後の開始位置・終了位置を受け取る\r
274         /// パラメータはテキスト挿入の結果を含む。これらのパラメータの値は、\r
275         /// アプリケーションがどのようにドキュメントにテキストを挿入するかに依\r
276         /// 存している。このフラグは実際にはテキストを挿入しないでテキスト挿入\r
277         /// の結果を見るために使用する。このフラグを使う場合はTS_TEXTCHANGE \r
278         /// 構造体を埋める必要はない。\r
279         /// </summary>\r
280         TF_IAS_QUERYONLY = 2\r
281     }\r
282 \r
283 \r
284     /// <summary>\r
285     /// ランタイプ\r
286     /// </summary>\r
287     public enum TsRunType\r
288     {\r
289         /// <summary>\r
290         /// プレーンテキスト。\r
291         /// </summary>\r
292         TS_RT_PLAIN,\r
293         /// <summary>\r
294         /// 不可視。\r
295         /// </summary>\r
296         TS_RT_HIDDEN,\r
297         /// <summary>\r
298         /// アプリケーションや ITextStore インターフェイスを実装するテキスト\r
299         /// サービスによるテキスト内の組み込まれたプライベートデータタイプ。\r
300         /// </summary>\r
301         TS_RT_OPAQUE\r
302     }\r
303 \r
304 \r
305     /// <summary>\r
306     /// ラン情報を示す構造体。\r
307     /// </summary>\r
308     [StructLayout(LayoutKind.Sequential, Pack=4),\r
309      Guid("A6231949-37C5-4B74-A24E-2A26C327201D")\r
310     ]\r
311     public struct TS_RUNINFO\r
312     {\r
313         /// <summary>\r
314         /// テキストラン内の文字数。\r
315         /// </summary>\r
316         public int length;\r
317         /// <summary>\r
318         /// テキストランのタイプ。\r
319         /// </summary>\r
320         public TsRunType type;\r
321     }\r
322 \r
323 \r
324     /// <summary>\r
325     /// 変更前および変更後の開始位置・終了位置を示す構造体。\r
326     /// </summary>\r
327     [StructLayout(LayoutKind.Sequential, Pack=4),\r
328      Guid("F3181BD6-BCF0-41D3-A81C-474B17EC38FB")\r
329     ]\r
330     public struct TS_TEXTCHANGE\r
331     {\r
332         /// <summary>\r
333         /// テキストがドキュメントに挿入される前の開始位置。\r
334         /// </summary>\r
335         public int start;\r
336         /// <summary>\r
337         /// テキストがドキュメントに挿入される前の終了位置。値は挿入位置である\r
338         /// start と同じ値となる。もし、start と異なっている場合は、テキストは\r
339         /// テキストの挿入の前に選択されていた。\r
340         /// </summary>\r
341         public int oldEnd;\r
342         /// <summary>\r
343         /// テキストを挿入した後の終了位置。\r
344         /// </summary>\r
345         public int newEnd;\r
346     }\r
347 \r
348 \r
349     [StructLayout(LayoutKind.Sequential, Pack=8),\r
350      Guid("2CC2B33F-1174-4507-B8D9-5BC0EB37C197")\r
351     ]\r
352     public struct TS_ATTRVAL\r
353     {\r
354         public Guid attributeId;\r
355         public int overlappedId;\r
356         public int reserved;\r
357         public VARIANT val;\r
358     }\r
359 \r
360 \r
361     /// <summary>\r
362     /// ITextStoreACP::GetACPFromPoint() で使用されるフラグ。\r
363     /// \r
364     /// <para>詳しくは http://msdn.microsoft.com/en-us/library/ms538418(v=VS.85).aspx の Remarks 参照。</para>\r
365     /// </summary>\r
366     [Flags]\r
367     public enum GetPositionFromPointFlags\r
368     {\r
369         /// <summary>\r
370         /// もし、スクリーン座標での点が文字バウンディングボックスに含まれてい\r
371         /// ないなら、もっとも近い文字位置が返される。\r
372         /// </summary>\r
373         GXFPF_NEAREST = 2,\r
374         /// <summary>\r
375         /// もし、スクリーン座標での点が文字バウンディングボックスの中に含まれ\r
376         /// ている場合、返される文字位置は ptScreen にもっとも近いバウンディン\r
377         /// グの端を持つ文字の位置である。\r
378         /// </summary>\r
379         GXFPF_ROUND_NEAREST = 1\r
380     }\r
381 \r
382 \r
383     /// <summary>\r
384     /// ITextStoreACPSink::OnTextChange() で使用されるフラグ。\r
385     /// </summary>\r
386     [Flags]\r
387     public enum OnTextChangeFlags\r
388     {\r
389         NONE = 0,\r
390         TS_TC_CORRECTION = 1\r
391     }\r
392 \r
393 \r
394     /// <summary>\r
395     /// ITextStoreACPSink::OnLayoutChange() で使用されるフラグ。\r
396     /// </summary>\r
397     public enum TsLayoutCode\r
398     {\r
399         /// <summary>\r
400         /// ビューが生成された。\r
401         /// </summary>\r
402         TS_LC_CREATE,\r
403         /// <summary>\r
404         /// レイアウトが変更された。\r
405         /// </summary>\r
406         TS_LC_CHANGE,\r
407         /// <summary>\r
408         /// レイアウトが破棄された。\r
409         /// </summary>\r
410         TS_LC_DESTROY\r
411     }\r
412 \r
413 \r
414     /// <summary>\r
415     /// GetSelection() の i_index 引数に使用する定数。\r
416     /// </summary>\r
417     public enum GetSelectionIndex : int\r
418     {\r
419         /// <summary>\r
420         /// デフォルト選択を意味する。\r
421         /// </summary>\r
422         TS_DEFAULT_SELECTION = -1\r
423     }\r
424 \r
425 \r
426 //============================================================================\r
427 \r
428 \r
429     /// <summary>\r
430     /// テキストストアのメソッドの戻り値(C# では COMException のエラーコード)\r
431     /// </summary>\r
432     public static class TsResult\r
433     {\r
434         /// <summary>\r
435         /// Application does not support the data type contained in the IDataObject object to be inserted using ITextStoreACP::InsertEmbedded. \r
436         /// </summary>\r
437         public const int TS_E_FORMAT = unchecked((int)0x8004020a);\r
438         /// <summary>\r
439         /// Parameter is not within the bounding box of any character.\r
440         /// </summary>\r
441         public const int TS_E_INVALIDPOINT = unchecked((int)0x80040207);\r
442         /// <summary>\r
443         /// Range specified extends outside the document.\r
444         /// </summary>\r
445         public const int TS_E_INVALIDPOS = unchecked((int)0x80040200);\r
446         /// <summary>\r
447         /// Object does not support the requested interface.\r
448         /// </summary>\r
449         public const int TS_E_NOINTERFACE = unchecked((int)0x80040204);\r
450         /// <summary>\r
451         /// Application has not calculated a text layout.\r
452         /// </summary>\r
453         public const int TS_E_NOLAYOUT = unchecked((int)0x80040206);\r
454         /// <summary>\r
455         /// Application does not have a read-only lock or read/write lock for the document.\r
456         /// </summary>\r
457         public const int TS_E_NOLOCK = unchecked((int)0x80040201);\r
458         /// <summary>\r
459         /// Embedded content offset is not positioned before a TF_CHAR_EMBEDDED character.\r
460         /// </summary>\r
461         public const int TS_E_NOOBJECT = unchecked((int)0x80040202);\r
462         /// <summary>\r
463         /// Document has no selection.\r
464         /// </summary>\r
465         public const int TS_E_NOSELECTION = unchecked((int)0x80040205);\r
466         /// <summary>\r
467         /// Content cannot be returned to match the service GUID.\r
468         /// </summary>\r
469         public const int TS_E_NOSERVICE = unchecked((int)0x80040203);\r
470         /// <summary>\r
471         /// Document is read-only. Cannot modify content.\r
472         /// </summary>\r
473         public const int TS_E_READONLY = unchecked((int)0x80040209);\r
474         /// <summary>\r
475         /// Document cannot be locked synchronously.\r
476         /// </summary>\r
477         /// <remarks>\r
478         /// CAUTION: this value is marked as 0x00040300 in the document.\r
479         /// </remarks>\r
480         public const int TS_E_SYNCHRONOUS = unchecked((int)0x00040208);\r
481         /// <summary>\r
482         /// Document successfully received an asynchronous lock.\r
483         /// </summary>\r
484         public const int TS_S_ASYNC = 0x01;\r
485         /// <summary>\r
486         /// COMCTL.h より。SINK をこれ以上登録できない。\r
487         /// </summary>\r
488         public const int CONNECT_E_ADVISELIMIT = -2147220991;\r
489         /// <summary>\r
490         /// COMCTL.h より。SINK は登録されていない。\r
491         /// </summary>\r
492         public const int CONNECT_E_NOCONNECTION = -2147220992;\r
493     }\r
494 \r
495 \r
496     //============================================================================\r
497 \r
498 \r
499 #if !METRO\r
500     /// <summary>\r
501     /// テキストストア\r
502     /// </summary>\r
503     [ComImport,\r
504      InterfaceType(ComInterfaceType.InterfaceIsIUnknown),\r
505      Guid("28888fe3-c2a0-483a-a3ea-8cb1ce51ff3d")\r
506     ]\r
507     public interface ITextStoreACP\r
508     {\r
509         /// <summary>\r
510         /// TSF マネージャのシンクインターフェイスを識別する。\r
511         /// <para>\r
512         /// ITextStoreACP::AdviseSink() メソッドは ITextStoreACPSink インターフェイス\r
513         /// から新しいアドバイズシンクをインストール、または既存のアドバイズシンクの\r
514         /// 修正を行う。シンクインターフェイスは io_unknown_cp パラメータによって指定\r
515         /// される。\r
516         /// </para>\r
517         /// </summary>\r
518         ///\r
519         /// <param name="i_riid">\r
520         /// シンクインターフェイスを指定する。\r
521         /// </param>\r
522         ///\r
523         /// <param name="i_unknown">\r
524         /// シンクインターフェイスへのポインタ。NULL 不可。\r
525         /// </param>\r
526         ///\r
527         /// <param name="i_mask">\r
528         /// アドバイズシンクを通知するイベントを指定する。\r
529         ///   <list type="table">\r
530         ///     <listheader>\r
531         ///       <term>フラグ(値)</term>\r
532         ///       <description>コメント</description>\r
533         ///     </listheader>\r
534         ///     <item>\r
535         ///       <term>TS_AS_TEXT_CHANGE(0x1)</term>\r
536         ///       <description>テキストはドキュメント内で変更された。</description>\r
537         ///     </item>\r
538         ///     <item>\r
539         ///       <term>TS_AS_SEL_CHANGE(0x2)</term>\r
540         ///       <description>テキストはドキュメント内で選択された。</description>\r
541         ///     </item>\r
542         ///     <item>\r
543         ///       <term>TS_AS_LAYOUT_CHANGE(0x04)</term>\r
544         ///       <description>ドキュメントのレイアウトが変更された。</description>\r
545         ///     </item>\r
546         ///     <item>\r
547         ///       <term>TS_AS_ATTR_CHANGE(0x08)</term>\r
548         ///       <description>ドキュメントの属性が変更された。</description>\r
549         ///     </item>\r
550         ///     <item>\r
551         ///       <term>TS_AS_STATUS_CHANGE(0x10)</term>\r
552         ///       <description>ドキュメントのステータスが変更された。</description>\r
553         ///     </item>\r
554         ///     <item>\r
555         ///       <term>TS_AS_ALL_SINKS</term>\r
556         ///       <description>上記全て</description>\r
557         ///     </item>\r
558         ///   </list>\r
559         /// </param>\r
560         void AdviseSink(\r
561             [In] ref Guid                                       i_riid,\r
562             [In, MarshalAs(UnmanagedType.Interface)] object     i_unknown,\r
563             [In] AdviseFlags                                    i_mask\r
564         );\r
565 \r
566 \r
567         //====================================================================\r
568 \r
569 \r
570         /// <summary>\r
571         ///   アプリケーションはもはやTSFマネージャから通知を必要としないことを示す\r
572         ///   ためにアプリケーションによって呼ばれる。TSFマネージャはシンクインター\r
573         ///   フェイスの解放と通知の停止を行う。\r
574         /// </summary>\r
575         ///\r
576         /// <param name="i_unknown">\r
577         ///   シンクオブジェクトへのポインタ。NULL 不可。\r
578         /// </param>\r
579         ///\r
580         /// <remark>\r
581         ///   新しいシンクオブジェクトを登録する ITextStoreACP::AdviseSink メソッド\r
582         ///   の全ての呼び出しは、このメソッドの呼び出しと対応していなければならない。\r
583         ///   以前に登録されたシンクの dwMask パラメータを更新するだけの\r
584         ///   ITextStoreACP::AdviseSink() メソッドの呼び出しは\r
585         ///   ITextStoreACP::UnadviseSink() メソッドの呼び出しを必要としない。\r
586         ///\r
587         ///   <para>\r
588         ///     io_unknown_cp パラメータは ITextStoreACP::AdviseSink メソッドに渡さ\r
589         ///     れたオリジナルのポインタとして同じ COM 識別子でなければいけない。\r
590         ///   </para>\r
591         /// </remark>\r
592         ///\r
593         /// <returns>\r
594         ///   <list type="table">\r
595         ///     <listheader>\r
596         ///       <term>戻り値</term>\r
597         ///       <description>意味</description>\r
598         ///     </listheader>\r
599         ///     <item>\r
600         ///       <term>S_OK</term>\r
601         ///       <description>メソッドは成功した。</description>\r
602         ///     </item>\r
603         ///     <item>\r
604         ///       <term>CONNECT_E_NOCONNECTION</term>\r
605         ///       <description>\r
606         ///         アクティブなシンクオブジェクトは存在しない。\r
607         ///       </description>\r
608         ///     </item>\r
609         ///   </list>\r
610         /// </returns>\r
611         void UnadviseSink(\r
612             [In, MarshalAs(UnmanagedType.Interface)] object i_unknown\r
613         );\r
614 \r
615 \r
616         //====================================================================\r
617 \r
618 \r
619         /// <summary>\r
620         ///   TSFマネージャがドキュメントを修正するためにドキュメントロックを提供す\r
621         ///   るためにTSFマネージャによって呼び出される。このメソッドはドキュメント\r
622         ///   ロックを作成するために ITextStoreACPSink::OnLockGranted() メソッドを呼\r
623         ///   び出さなければいけない。\r
624         /// </summary>\r
625         ///\r
626         /// <param name="i_lockFlags">ロック要求のタイプを指定する。\r
627         ///   <list type="table">\r
628         ///     <listheader>\r
629         ///       <term>フラグ</term>\r
630         ///       <description>意味</description>\r
631         ///     </listheader>\r
632         ///     <item>\r
633         ///       <term>TS_LF_READ</term>\r
634         ///       <description>\r
635         ///         ドキュメントは読取専用ロックで、修正はできない。\r
636         ///       </description>\r
637         ///     </item>\r
638         ///     <item>\r
639         ///       <term>TS_LF_READWRITE</term>\r
640         ///       <description>\r
641         ///         ドキュメントは読み書き両用で、修正できる。\r
642         ///       </description>\r
643         ///     </item>\r
644         ///     <item>\r
645         ///       <term>TS_LF_SYNC</term>\r
646         ///       <description>\r
647         ///         他のフラグと一緒に指定された場合は、ドキュメントは同期ロックである。\r
648         ///       </description>\r
649         ///     </item>\r
650         ///   </list>\r
651         /// </param>\r
652         ///\r
653         /// <param name="o_sessionResult">\r
654         ///   ロックリクエストが同期ならば、ロック要求の結果である\r
655         ///   ITextStoreACP::OnLockGranted() メソッドからの HRESULT を受け取る。\r
656         ///\r
657         ///   <para>\r
658         ///     ロック要求が非同期で結果が TS_S_ASYNC の場合、ドキュメントは非同期ロッ\r
659         ///     クを受け取る。ロック要求が非同期で結果が TS_E_SYNCHRONOUS の場合は、ド\r
660         ///     キュメントは非同期でロックできない。\r
661         ///   </para>\r
662         /// </param>\r
663         ///\r
664         /// <remark>\r
665         ///   このメソッドはドキュメントをロックするために\r
666         ///   ITextStoreACPSink::OnLockGranted() メソッドを使用する。アプリケーショ\r
667         ///   ンは ITextStoreACP::RequestLock() メソッド内でドキュメントを修正したり\r
668         ///   ITextStoreACPSink::OnTextChange() メソッドを使用して変更通知を送ったり\r
669         ///   してはいけない。もし、アプリケーションがレポートするための変更をペンディ\r
670         ///   ングしているなら、アプリケーションは非同期ロック要求のみを返さなければ\r
671         ///   いけない。\r
672         ///\r
673         ///   <para>\r
674         ///     アプリケーションは複数の RequestLock() メソッド呼び出しをキューに入\r
675         ///     れることを試みてはいけない、なぜなら、アプリケーションは一つのコール\r
676         ///     バックのみを要求されるから。もし、呼び出し元がいくつかの読取要求や一\r
677         ///     つ以上の書き込み要求を作ったとしても、コールバックは書き込みアクセス\r
678         ///     でなければいけない。\r
679         ///   </para>\r
680         ///\r
681         ///   <para>\r
682         ///     成功は、非同期ロックの要求にとって代わって同期ロックを要求する。失敗は\r
683         ///     (複数の)非同期ロックの要求を同期ロックに代えることができない。実装は、\r
684         ///     要求が存在すれば発行済みの非同期要求をまだ満たしていなければいけない。\r
685         ///   </para>\r
686         ///\r
687         ///   <para>\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
694         ///     ターは無視すべきである。\r
695         ///   </para>\r
696         ///\r
697         ///   <para>\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
711         ///   </para>\r
712         ///\r
713         ///   <para>\r
714         ///     呼び出し元が読み取り専用ロックを維持している場合を除いて、呼び出し元\r
715         ///     はこのメソッドを再帰的に呼び出してはいけない。この場合、メソッドは非\r
716         ///     同期に書き込み要求を尋ねるために再帰的に呼び出すことができる。書き込\r
717         ///     みロックは読取専用ロックが終わった後に認められるだろう。\r
718         ///   </para>\r
719         ///\r
720         ///   <para>\r
721         ///     ロックの強要:アプリケーションは適切なロックのタイプが存在するかどうか\r
722         ///     ドキュメントへのアクセスを許す前に確かめなければいけない。例えば、\r
723         ///     GetText() を処理することを許可する前に少なくとも読み取り専用ロックが\r
724         ///     行われているかどうか確かめなければいけない。もし、適切なロックがされ\r
725         ///     ていなければ、アプリケーションは TF_E_NOLOCK を返さなければいけない。\r
726         ///   </para>\r
727         /// </remark>\r
728         void RequestLock(\r
729             [In] LockFlags                                  i_lockFlags,\r
730             [Out, MarshalAs(UnmanagedType.Error)] out int   o_sessionResult\r
731         );\r
732 \r
733 \r
734         //====================================================================\r
735 \r
736         \r
737         /// <summary>\r
738         ///   ドキュメントのステータスを取得するために使用される。ドキュメントのステー\r
739         ///   タスは TS_STATUS 構造体を通して返される。\r
740         /// </summary>\r
741         ///\r
742         /// <param name="o_documentStatus">\r
743         ///   ドキュメントのステータスを含む TS_STATUS 構造体を受け取る。NULL 不可。\r
744         /// </param>\r
745         void GetStatus(\r
746             [Out] out TS_STATUS o_documentStatus\r
747         );\r
748 \r
749 \r
750         //====================================================================\r
751 \r
752 \r
753         /// <summary>\r
754         ///   ドキュメントが選択や挿入を許可することができるかどうかを決めるためにア\r
755         ///   プリケーションから呼ばれる。\r
756         ///\r
757         ///   <para>\r
758         ///     QueryInsert() メソッドは指定した開始位置と終了位置が有効かどうかを決\r
759         ///     める。編集を実行する前にドキュメントの編集を調整するために使用される。\r
760         ///     メソッドはドキュメントの範囲外の値を返してはいけない。\r
761         ///   </para>\r
762         /// </summary>\r
763         ///\r
764         /// <param name="i_startIndex">\r
765         ///   テキストを挿入する開始位置。\r
766         /// </param>\r
767         ///\r
768         /// <param name="i_endIndex">\r
769         ///   テキストを挿入する終了位置。選択中のテキストを置換する代わりに指定した\r
770         ///   位置へテキストを挿入する場合は、この値は i_startIndex と同じになる。\r
771         /// </param>\r
772         ///\r
773         /// <param name="i_length">\r
774         ///   置換するテキストの長さ。\r
775         /// </param>\r
776         ///\r
777         /// <param name="o_startIndex">\r
778         ///   挿入されるテキストの新しい開始位置を返す。このパラメータが NULL の場合、\r
779         ///   テキストは指定された位置に挿入できない。この値はドキュメントの範囲外を\r
780         ///   指定できない。\r
781         /// </param>\r
782         ///\r
783         /// <param name="o_endIndex">\r
784         ///   挿入されるテキストの新しい終了位置を返す。このパラメータが NULL の場合、\r
785         ///   テキストは指定された位置に挿入できない。この値はドキュメントの範囲外を\r
786         ///   指定できない\r
787         /// </param>\r
788         ///\r
789         /// <remark>\r
790         ///   o_startIndex と o_endIndex の値は、アプリケーションがどのように\r
791         ///   ドキュメントにテキストを挿入するかに依存している。もし、o_startIndex \r
792         ///   と o_endIndex が i_startIndex と同じならば、カーソルは挿入後のテキ\r
793         ///   ストの始まりにある。\r
794         ///   もし、o_startIndex と o_endIndex が i_endIndex と同じならば、\r
795         ///   カーソルは挿入後のテキストの終わりにある。o_startIndex と\r
796         ///   o_endIndex の差が挿入されたテキストの長さと同じなら、挿入後、挿入さ\r
797         ///   れたテキストはハイライトされている。\r
798         /// </remark>\r
799         void QueryInsert(\r
800             [In] int        i_startIndex,\r
801             [In] int        i_endIndex,\r
802             [In] int        i_length,\r
803             [Out] out int   o_startIndex, \r
804             [Out] out int   o_endIndex\r
805         );\r
806 \r
807 \r
808         //====================================================================\r
809 \r
810         \r
811         /// <summary>\r
812         ///   ドキュメント内のテキスト選択の位置を返す。このメソッドは複数テキスト選\r
813         ///   択をサポートする。呼び出し元はこのメソッドを呼び出す前にドキュメントに\r
814         ///   読取専用ロックをかけておかなければいけない。\r
815         /// </summary>\r
816         ///\r
817         /// <param name="i_index">\r
818         ///   処理を開始するテキスト選択を指定する。もし、TS_DEFAULT_SELECTION(-1)\r
819         ///   定数が指定された場合、入力選択は処理を開始する。\r
820         /// </param>\r
821         ///\r
822         /// <param name="i_selectionBufferLength">\r
823         ///   返す選択の最大数を指定する。\r
824         /// </param>\r
825         ///\r
826         /// <param name="o_selections">\r
827         ///   選択されたテキストのスタイル、開始位置、終了位置を受け取る。これらの値\r
828         ///   は TS_SELECTION_ACP 構造体に出力される。\r
829         /// </param>\r
830         ///\r
831         /// <param name="o_fetchedLength">\r
832         ///   o_selections に返された構造体の数を受け取る。\r
833         /// </param>\r
834         void GetSelection(\r
835             [In] int                                                                        i_index,\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
839         );\r
840 \r
841 \r
842         //====================================================================\r
843 \r
844         \r
845         /// <summary>\r
846         ///   ドキュメント内のテキストを選択する。アプリケーションはこのメソッドを呼\r
847         ///   ぶ前に読み書き両用ロックをかけなればいけない。\r
848         /// </summary>\r
849         ///\r
850         /// <param name="i_count">\r
851         ///   i_selections 内のテキスト選択の数を指定する。\r
852         /// </param>\r
853         ///\r
854         /// <param name="i_selections">\r
855         ///   TS_SELECTION_ACP 構造体を通して選択されたテキストのスタイル、開始位置、\r
856         ///   終了位置を指定する。\r
857         /// \r
858         ///   <para>\r
859         ///     開始位置と終了位置が同じ場合は、指定した位置にキャレットを配置する。\r
860         ///     ドキュメント内に一度に一つのみキャレットを配置できる。\r
861         ///   </para>\r
862         /// </param>\r
863         void SetSelection(\r
864             [In] int                                                                    i_count,\r
865             [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] TS_SELECTION_ACP[] i_selections\r
866         );\r
867 \r
868 \r
869         //====================================================================\r
870 \r
871         \r
872         /// <summary>\r
873         ///   指定された位置のテキストに関する情報を返す。このメソッドは可視状態およ\r
874         ///   び不可視状態のテキストや埋め込まれたデータがテキストに関連付けられてい\r
875         ///   るかどうかを返す。\r
876         /// </summary>\r
877         ///\r
878         /// <param name="i_startIndex">\r
879         ///   開始位置を指定する。\r
880         /// </param>\r
881         ///\r
882         /// <param name="i_endIndex">\r
883         ///   終了位置を指定する。このパラメータが -1 の場合はテキストストア内の全て\r
884         ///   のテキストを返す。\r
885         /// </param>\r
886         ///\r
887         /// <param name="o_plainText">\r
888         ///   プレインテキストデータを受け取るバッファを指定する。このパラメータが\r
889         ///   NULL の場合は、 cchPlainReq は 0 でなければいけない。\r
890         /// </param>\r
891         ///\r
892         /// <param name="i_plainTextLength">\r
893         ///   プレインテキストの文字数を指定する。\r
894         /// </param>\r
895         ///\r
896         /// <param name="o_plainTextLength">\r
897         ///   プレインテキストバッファへコピーされた文字数を受け取る。このパラメータ\r
898         ///   は NULL を指定できない。値が必要でないときに使用する。\r
899         /// </param>\r
900         ///\r
901         /// <param name="o_runInfos">\r
902         ///   TS_RUNINFO 構造体の配列を受け取る。i_runInfoLength が 0 の場合は NULL。\r
903         /// </param>\r
904         ///\r
905         /// <param name="i_runInfoLength">\r
906         ///   o_runInfos の許容数を指定する。\r
907         /// </param>\r
908         ///\r
909         /// <param name="o_runInfoLength">\r
910         ///   o_runInfosに書き込まれた数を受け取る。このパラメータは NULL を指定で\r
911         ///   きない。\r
912         /// </param>\r
913         ///\r
914         /// <param name="o_nextUnreadCharPos">\r
915         ///   次の読み込んでいない文字の位置を受け取る。このパラメータは NULL を指定\r
916         ///   できない。\r
917         /// </param>\r
918         ///\r
919         /// <remark>\r
920         ///   このメソッドを使う呼び出し元は ITextStoreACP::RequestLock() メソッドを\r
921         ///   呼ぶことでドキュメントに読取専用ロックをかけなければいけない。ロックし\r
922         ///   ていない場合はメソッドは失敗し、TF_E_NOLOCK を返す。\r
923         ///\r
924         ///   <para>\r
925         ///     アプリケーションはまた、内部の理由によって戻り値を切り取ることができる。\r
926         ///     呼び出し元は必須の戻り値を取得するために戻された文字やテキストのラン\r
927         ///     数を注意深く調査しなければいけない。戻り値が不完全ならば、戻り値が完\r
928         ///     全なものとなるまでメソッドを繰り返し呼び出さなければいけない。\r
929         ///   </para>\r
930         ///\r
931         ///   <para>\r
932         ///     呼び出し元は i_runInfoLength パラメータを0にセットし、o_runInfos \r
933         ///     パラメータを NULL にすることで、プレインテキストを要求できる。しかし\r
934         ///     ながら、呼び出し元は o_plainTextLength に非 NULL の有効な値を提\r
935         ///     供しなければならない、パラメータを使用しないとしても。\r
936         ///   </para>\r
937         ///\r
938         ///   <para>\r
939         ///     i_endIndex が -1 の場合、ストリームの最後がセットされたものとして処\r
940         ///     理しなければいけない。その他の場合、0 以上でなければいけない。\r
941         ///   </para>\r
942         ///\r
943         ///   <para>\r
944         ///     メソッドを抜ける際に、o_nextUnreadCharPos は戻り値によって参照\r
945         ///     されていないストリーム内の次の文字の位置をセットされていなければなら\r
946         ///     ない。呼び出し元はこれを使用して複数の GetText() 呼び出しで素早くテ\r
947         ///     キストをスキャンする。\r
948         ///   </para>\r
949         ///\r
950         /// </remark>\r
951         void 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
961         );\r
962 \r
963 \r
964         //====================================================================\r
965 \r
966         \r
967         /// <summary>\r
968         ///   SetText() メソッドは与えられた文字位置のテキスト選択をセットする。\r
969         /// </summary>\r
970         ///\r
971         /// <param name="i_flags">\r
972         ///   TS_ST_CORRECTION がセットされている場合、テキストは既存のコンテントの\r
973         ///   移動(訂正)であり、特別なテキストマークアップ情報(メタデータ)が保持され\r
974         ///   る - .wav ファイルデータや言語IDなど。クライアントは保持されるマークアッ\r
975         ///   プ情報のタイプを定義する。\r
976         /// </param>\r
977         ///\r
978         /// <param name="i_startIndex">\r
979         ///   置換するテキストの開始位置を指定する。\r
980         /// </param>\r
981         ///\r
982         /// <param name="i_endIndex">\r
983         ///   置換するテキストの終了位置を指定する。-1 の場合は無視される。\r
984         /// </param>\r
985         ///\r
986         /// <param name="i_text">\r
987         ///   置き換えるテキストへのポインタを指定する。テキストの文字数は i_length\r
988         ///   パラメータによって指定されるため、テキスト文字列は NULL 終端文字を持っ\r
989         ///   ていない。\r
990         /// </param>\r
991         ///\r
992         /// <param name="i_length">\r
993         ///   i_text の文字数。\r
994         /// </param>\r
995         ///\r
996         /// <param name="o_textChange">\r
997         ///   次のデータをもつ TS_TEXTCHANGE 構造体へのポインタ。\r
998         ///\r
999         ///   <list type="table">\r
1000         ///     <listheader>\r
1001         ///       <term>メンバー名</term>\r
1002         ///       <description>意味</description>\r
1003         ///     </listheader>\r
1004         ///     <item>\r
1005         ///       <term>acpStart</term>\r
1006         ///       <description>\r
1007         ///         テキストがドキュメントに挿入される前の開始位置。\r
1008         ///       </description>\r
1009         ///     </item>\r
1010         ///     <item>\r
1011         ///       <term>acpOldEnd</term>\r
1012         ///       <description>\r
1013         ///         テキストがドキュメントに挿入される前の終了位置。値は挿入位置であ\r
1014         ///         る acpStart と同じ値となる。もし、acpStart と異なっている場合は、\r
1015         ///         テキストはテキストの挿入の前に選択されていた。\r
1016         ///       </description>\r
1017         ///     </item>\r
1018         ///     <item>\r
1019         ///       <term>acpNewEnd</term>\r
1020         ///       <description>\r
1021         ///         テキストを挿入した後の終了位置。\r
1022         ///       </description>\r
1023         ///     </item>\r
1024         ///   </list>\r
1025         /// </param>\r
1026         void SetText(\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
1033         );\r
1034 \r
1035 \r
1036         //====================================================================\r
1037 \r
1038         \r
1039         /// <summary>\r
1040         /// 指定されたテキスト文字列について Formatted Text データを返す。呼び\r
1041         /// 出し元はこのメソッドを呼ぶ前に読み書き両用ロックをかけなければいけない。\r
1042         /// </summary>\r
1043         void GetFormattedText(\r
1044             [In] int                                                i_start,\r
1045             [In] int                                                i_end,\r
1046             [Out, MarshalAs(UnmanagedType.Interface)] out object    o_obj\r
1047         );\r
1048 \r
1049 \r
1050         //====================================================================\r
1051 \r
1052 \r
1053         /// <summary>\r
1054         /// 組み込みオブジェクトを取得する。\r
1055         /// </summary>\r
1056         void GetEmbedded(\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
1061         );\r
1062 \r
1063 \r
1064         //====================================================================\r
1065 \r
1066 \r
1067         /// <summary>\r
1068         /// 組み込みオブジェクトを挿入できるか問い合わせる。\r
1069         /// </summary>\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
1074         );\r
1075 \r
1076 \r
1077         //====================================================================\r
1078 \r
1079 \r
1080         /// <summary>\r
1081         /// 組み込みオブジェクトを挿入する。\r
1082         /// </summary>\r
1083         void InsertEmbedded(\r
1084             [In] InsertEmbeddedFlags                        i_flags,\r
1085             [In] int                                        i_start,\r
1086             [In] int                                        i_end,\r
1087             [In, MarshalAs(UnmanagedType.Interface)] object i_obj,\r
1088             [Out] out TS_TEXTCHANGE                         o_textChange\r
1089         );\r
1090 \r
1091 \r
1092         //====================================================================\r
1093 \r
1094 \r
1095         /// <summary>\r
1096         ///   ITextStoreACP::InsertTextAtSelection() メソッドは挿入位置や選択位置に\r
1097         ///   テキストを挿入する。呼び出し元はテキストを挿入する前に読み書き両用ロッ\r
1098         ///   クをかけていなければならない。\r
1099         /// </summary>\r
1100         ///\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
1105         ///\r
1106         ///   <list type="table">\r
1107         ///     <listheader>\r
1108         ///       <term>値</term>\r
1109         ///       <description>意味</description>\r
1110         ///     </listheader>\r
1111         ///     <item>\r
1112         ///       <term>0</term>\r
1113         ///       <description>\r
1114         ///         テキスト挿入が発生し、o_startIndex と o_endIndex パラメータ\r
1115         ///         はテキスト挿入の結果を含んでいる。TS_TEXTCHANGE 構造体は 0 で埋め\r
1116         ///         られていなければならない。\r
1117         ///       </description>\r
1118         ///     </item>\r
1119         ///     <item>\r
1120         ///       <term>TF_IAS_NOQUERY</term>\r
1121         ///       <description>\r
1122         ///         テキストは挿入され、o_startIndex と o_endIndex パラメータ\r
1123         ///         の値は NULL にでき、TS_TEXTCHANGE 構造体は埋められなければいけない。\r
1124         ///         このフラグはテキスト挿入の結果を見るために使用する。\r
1125         ///       </description>\r
1126         ///     </item>\r
1127         ///     <item>\r
1128         ///       <term>TF_IAS_QUERYONLY</term>\r
1129         ///       <description>\r
1130         ///         テキストは挿入されず、o_startIndex と o_endIndex パラメータ\r
1131         ///         はテキスト挿入の結果を含む。これらのパラメータの値は、アプリケー\r
1132         ///         ションがどのようにドキュメントにテキストを挿入するかに依存している。\r
1133         ///         詳しくは注意を見ること。このフラグは実際にはテキストを挿入しない\r
1134         ///         でテキスト挿入の結果を見るために使用する。このフラグを使う場合は\r
1135         ///         TS_TEXTCHANGE 構造体を埋める必要はない。\r
1136         ///       </description>\r
1137         ///     </item>\r
1138         ///   </list>\r
1139         /// </param>\r
1140         ///\r
1141         /// <param name="i_text">\r
1142         ///   挿入する文字列へのポインタ。NULL 終端にすることができる。\r
1143         /// </param>\r
1144         ///\r
1145         /// <param name="i_length">\r
1146         ///   テキスト長を指定する。\r
1147         /// </param>\r
1148         ///\r
1149         /// <param name="o_startIndex">\r
1150         ///   テキスト挿入が発生した場所の開始位置へのポインタ。\r
1151         /// </param>\r
1152         ///\r
1153         /// <param name="o_endIndex">\r
1154         ///   テキスト挿入が発生した場所の終了位置へのポインタ。このパラメータは挿入\r
1155         ///   の場合、o_startIndex パラメータと同じ値になる。\r
1156         /// </param>\r
1157         ///\r
1158         /// <param name="o_textChange">\r
1159         ///   次のメンバーを持つ TS_TEXTCHANGE 構造体へのポインタ。\r
1160         ///\r
1161         ///   <list type="table">\r
1162         ///     <listheader>\r
1163         ///       <term>メンバー名</term>\r
1164         ///       <description>意味</description>\r
1165         ///     </listheader>\r
1166         ///     <item>\r
1167         ///       <term>acpStart</term>\r
1168         ///       <description>\r
1169         ///         テキストがドキュメントに挿入される前の開始位置。\r
1170         ///       </description>\r
1171         ///     </item>\r
1172         ///     <item>\r
1173         ///       <term>acpOldEnd</term>\r
1174         ///       <description>\r
1175         ///         テキストがドキュメントに挿入される前の終了位置。値は挿入位置であ\r
1176         ///         る acpStart と同じ値となる。もし、acpStart と異なっている場合は、\r
1177         ///         テキストはテキストの挿入の前に選択されていた。\r
1178         ///       </description>\r
1179         ///     </item>\r
1180         ///     <item>\r
1181         ///       <term>acpNewEnd</term>\r
1182         ///       <description>\r
1183         ///         テキストを挿入した後の終了位置。\r
1184         ///       </description>\r
1185         ///     </item>\r
1186         ///   </list>\r
1187         /// </param>\r
1188         ///\r
1189         /// <remark>\r
1190         ///   o_startIndex と o_endIndex パラメータの値はアプリケーションがド\r
1191         ///   キュメントにどのようにテキストを挿入したかによる。たとえば、アプリケー\r
1192         ///   ションがテキストを挿入後、挿入したテキストの開始位置にカーソルをセット\r
1193         ///   したなら、o_startIndex と o_endIndex パラメータは TS_TEXTCHANGE \r
1194         ///   構造体の acpStart メンバと同じ値になる。\r
1195         ///   <para>\r
1196         ///     アプリケーションは ITextStoreACPSink::OnTextChange() メソッドをこの\r
1197         ///     メソッド内で呼ぶべきではない。\r
1198         ///   </para>\r
1199         /// </remark>\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
1207         );\r
1208 \r
1209 \r
1210         //====================================================================\r
1211 \r
1212 \r
1213         /// <summary>\r
1214         ///   選択位置もしくは挿入位置に組み込みオブジェクトを挿入する。\r
1215         /// </summary>\r
1216         void InsertEmbeddedAtSelection(\r
1217             InsertAtSelectionFlags flags,\r
1218             [MarshalAs(UnmanagedType.Interface)] object obj,\r
1219             out int start,\r
1220             out int end,\r
1221             out TS_TEXTCHANGE change\r
1222         );\r
1223 \r
1224 \r
1225         //====================================================================\r
1226 \r
1227 \r
1228         /// <summary>\r
1229         ///   ドキュメントのサポートされている属性を取得する。\r
1230         /// </summary>\r
1231         /// \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
1240         ///   トされる。\r
1241         /// </param>\r
1242         /// \r
1243         /// <param name="i_length">\r
1244         ///   取得するサポートされる属性の数を指定する。\r
1245         /// </param>\r
1246         /// \r
1247         /// <param name="i_filterAttributes">\r
1248         ///   確認するための属性が指定された TS_ATTRID データタイプへのポイン\r
1249         ///   タ。メソッドは TS_ATTRID によって指定された属性のみを返す(他の\r
1250         ///   属性をサポートしていたとしても)。\r
1251         /// </param>\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
1256         );\r
1257 \r
1258         \r
1259         //====================================================================\r
1260 \r
1261 \r
1262         /// <summary>\r
1263         ///   指定した文字位置の属性を取得する。\r
1264         /// </summary>\r
1265         /// \r
1266         /// <param name="i_position">\r
1267         ///   ドキュメント内の開始位置。\r
1268         /// </param>\r
1269         /// \r
1270         /// <param name="i_length">\r
1271         ///   取得する属性の数。\r
1272         /// </param>\r
1273         /// \r
1274         /// <param name="i_filterAttributes">\r
1275         ///   確認するための属性が指定された TS_ATTRID データタイプへのポインタ。\r
1276         /// </param>\r
1277         /// \r
1278         /// <param name="i_flags">\r
1279         ///   0 でなければいけない。\r
1280         /// </param>\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
1286         );\r
1287 \r
1288 \r
1289         //====================================================================\r
1290 \r
1291                                 \r
1292         /// <summary>\r
1293         ///   指定した文字位置の属性のリストを取得する。\r
1294         /// </summary>\r
1295         /// <param name="i_position">ドキュメント内の開始位置。</param>\r
1296         /// \r
1297         /// <param name="i_length">取得する属性の数。</param>\r
1298         /// \r
1299         /// <param name="i_filterAttributes">\r
1300         ///   RetrieveRequestedAttr() メソッドを呼ぶための属性を指定する。\r
1301         ///   このパラメータがセットされていなければメソッドは指定された位置で\r
1302         ///   始まる属性を返す。他の指定可能な値は以下のとおり。\r
1303         ///   <list type="table">\r
1304         ///     <listheader>\r
1305         ///       <term>値</term>\r
1306         ///       <description>意味</description>\r
1307         ///     </listheader>\r
1308         ///     <item>\r
1309         ///       <term>TS_ATTR_FIND_WANT_END</term>\r
1310         ///       <description>\r
1311         ///         指定した文字位置で終了する属性を取得する。\r
1312         ///       </description>\r
1313         ///     </item>\r
1314         ///     <item>\r
1315         ///       <term>TS_ATTR_FIND_WANT_VALUD</term>\r
1316         ///       <description>\r
1317         ///         属性の取得に加えて属性の値を取得する。属性値は\r
1318         ///         ITextStoreACP::RetrieveRequestedAttrs() メソッド呼び出しの\r
1319         ///         TS_ATTRVAL 構造体の varValue メンバにセットされる。\r
1320         ///       </description>\r
1321         ///     </item>\r
1322         ///   </list>\r
1323         /// </param>\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
1330         );\r
1331 \r
1332 \r
1333         //====================================================================\r
1334 \r
1335                                 \r
1336         /// <summary>\r
1337         ///   属性変更が発生している場所の文字位置を決定する。\r
1338         /// </summary>\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
1344         /// </param>\r
1345         /// <param name="i_flags">\r
1346         ///   検索方向を指定する。デフォルトではフォワード検索。\r
1347         ///   <list type="table">\r
1348         ///     <listheader>\r
1349         ///       <term>フラグ</term>\r
1350         ///       <description>意味</description>\r
1351         ///     </listheader>\r
1352         ///     \r
1353         ///     <item>\r
1354         ///       <term>TS_ATTR_FIND_BACKWARDS</term>\r
1355         ///       <description>バックワード検索。</description>\r
1356         ///     </item>\r
1357         ///     <item>\r
1358         ///       <term>tS_ATTR_FIND_WANT_OFFSET</term>\r
1359         ///       <description>\r
1360         ///         o_foundOffset パラメータは i_start からの属性変更のオフセットを受け取る。\r
1361         ///       </description>\r
1362         ///     </item>\r
1363         ///   </list>\r
1364         /// </param>\r
1365         /// <param name="o_nextIndex">\r
1366         ///   属性変更をチェックする次の文字位置を受け取る。\r
1367         /// </param>\r
1368         /// <param name="o_found">\r
1369         ///   属性変更が発見された場合に TRUE を受け取る。そのほかは FALSE を受け取る。\r
1370         /// </param>\r
1371         /// <param name="o_foundOffset">\r
1372         ///   属性変更の開始位置(文字位置ではない)を受け取る。TS_ATTR_FIND_WANT_OFFSET\r
1373         ///   フラグが dwFlags にセットされていれば、 acpStart からのオフセットを受け取る。\r
1374         /// </param>\r
1375         void FindNextAttrTransition(\r
1376             [In] int                                                        i_start,\r
1377             [In] int                                                        i_halt,\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
1384         );\r
1385 \r
1386         \r
1387         //====================================================================\r
1388 \r
1389         \r
1390         /// <summary>\r
1391         ///   ITextStoreACP::RequestAttrsAtPosition(),\r
1392         ///   TextStoreACP::RequestAttrsTransitioningAtPosition(),\r
1393         ///   ITextStoreACP::RequestSupportedAttrs() によって取得された属性を返す。\r
1394         /// </summary>\r
1395         /// <param name="i_length">取得するサポートされる属性の数を指定する。</param>\r
1396         /// <param name="o_attributeVals">\r
1397         ///   サポートされる属性を受け取る TS_ATTRVAL 構造体へのポインタ。この\r
1398         ///   構造体のメンバはメソッド呼び出しの i_flags パラメータによる。\r
1399         /// </param>\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
1405         );\r
1406 \r
1407         \r
1408         //====================================================================\r
1409 \r
1410         \r
1411         /// <summary>ドキュメント内の文字数を取得する。</summary>\r
1412         ///\r
1413         /// <param name="o_length">最後の文字位置 + 1 を受け取る。</param>\r
1414         void GetEndACP(\r
1415             [Out] out int o_length\r
1416         );\r
1417 \r
1418         \r
1419         //====================================================================\r
1420 \r
1421         \r
1422         /// <summary>\r
1423         /// 現在のアクティブビューの TsViewCookie データタイプを返す。\r
1424         /// </summary>\r
1425         void GetActiveView(\r
1426             [Out] out int o_viewCookie\r
1427         );\r
1428 \r
1429         \r
1430         //====================================================================\r
1431 \r
1432         \r
1433         /// <summary>\r
1434         ///   スクリーン座標をアプリケーション文字位置に変換する。\r
1435         /// </summary>\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
1444         ///   <list>\r
1445         ///     <listheader>\r
1446         ///       <term>フラグ</term>\r
1447         ///       <description>意味</description>\r
1448         ///     </listheader>\r
1449         ///     \r
1450         ///     <item>\r
1451         ///       <term>GXFPF_ROUND_NEAREST</term>\r
1452         ///       <description>\r
1453         ///         もし、スクリーン座標での点が文字バウンディングボックスの中\r
1454         ///         に含まれている場合、返される文字位置は ptScreen にもっとも\r
1455         ///         近いバウンディングの端を持つ文字の位置である。\r
1456         ///       </description>\r
1457         ///     </item>\r
1458         ///     <item>\r
1459         ///       <term>GXFPF_NEAREST</term>\r
1460         ///       <description>\r
1461         ///         もし、スクリーン座標での点が文字バウンディングボックスに含\r
1462         ///         まれていないなら、もっとも近い文字位置が返される。\r
1463         ///         <para>\r
1464         ///         http://msdn.microsoft.com/en-us/library/ms538418(v=VS.85).aspx の Remarks 参照。\r
1465         ///         </para>\r
1466         ///       </description>\r
1467         ///     </item>\r
1468         ///   </list>\r
1469         /// </param>\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
1476         );\r
1477 \r
1478         \r
1479         //====================================================================\r
1480 \r
1481         \r
1482         /// <summary>\r
1483         ///   指定した文字位置のスクリーン座標を返す。読み取り専用ロックをかけて呼ば\r
1484         ///   なければいけない。\r
1485         /// </summary>\r
1486         ///\r
1487         /// <param name="i_viewCookie">\r
1488         ///   コンテキストビューを指定する。\r
1489         /// </param>\r
1490         ///\r
1491         /// <param name="i_startIndex">\r
1492         ///   ドキュメント内の取得するテキストの開始位置を指定する。\r
1493         /// </param>\r
1494         ///\r
1495         /// <param name="i_endIndex">\r
1496         ///   ドキュメント内の取得するテキストの終了位置を指定する。\r
1497         /// </param>\r
1498         ///\r
1499         /// <param name="o_rect">\r
1500         ///   指定した文字位置のテキストのスクリーン座標でのバウンディングボックスを\r
1501         ///   受け取る。\r
1502         /// </param>\r
1503         ///\r
1504         /// <param name="o_isClipped">\r
1505         ///   バウンディングボックスがクリッピングされたかどうかを受け取る。TRUE の\r
1506         ///   場合、バウンディングボックスはクリップされたテキストを含み、完全な要求\r
1507         ///   されたテキストの範囲を含んでいない。バウンディングボックスは要求された\r
1508         ///   範囲が可視状態でないため、クリップされた。\r
1509         /// </param>\r
1510         ///\r
1511         /// <remark>\r
1512         ///   ドキュメントウィンドウが最小化されていたり、指定されたテキストが現在表\r
1513         ///   示されていないならば、メソッドは S_OK を返して o_rect パラメータに\r
1514         ///   { 0, 0, 0, 0 }をセットしなければいけない。\r
1515         ///\r
1516         ///   <para>\r
1517         ///     TSF マネージャー側から変換候補ウィンドウの表示位置を割り出すために使用\r
1518         ///     される。\r
1519         ///   </para>\r
1520         /// </remark>\r
1521         void GetTextExt(\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
1527         );\r
1528 \r
1529         \r
1530         //====================================================================\r
1531 \r
1532         \r
1533         /// <summary>\r
1534         ///   テキストストリームが描画されるディスプレイサーフェイスのスクリーン座標\r
1535         ///   でのバウンディングボックスを取得する。\r
1536         /// </summary>\r
1537         ///\r
1538         /// <remark>\r
1539         ///   ドキュメントウィンドウが最小化されていたり、指定されたテキストが現在表\r
1540         ///   示されていないならば、メソッドは S_OK を返して o_rect パラメータに\r
1541         ///   { 0, 0, 0, 0 }をセットしなければいけない。\r
1542         /// </remark>\r
1543         void GetScreenExt(\r
1544             [In] int        i_viewCookie,\r
1545             [Out] out RECT  o_rect\r
1546         );\r
1547 \r
1548         \r
1549         //====================================================================\r
1550 \r
1551         \r
1552             /// <summary>\r
1553             ///   現在のドキュメントに一致するウィンドウのハンドルを取得する。\r
1554             /// </summary>\r
1555             ///\r
1556             /// <param name="i_viewCookie">\r
1557             ///   現在のドキュメントに一致する TsViewCookie データタイプを指定する。\r
1558             /// </param>\r
1559             ///\r
1560             /// <param name="o_hwnd">\r
1561             ///   現在のドキュメントに一致するウィンドウのハンドルへのポインタを受け取る。\r
1562             ///   一致するウィンドウがなければ NULL にできる。\r
1563             /// </param>\r
1564             ///\r
1565             /// <remark>\r
1566             ///   ドキュメントはメモリにあるが、スクリーンに表示されていない場合や、ウィ\r
1567             ///   ンドウがないコントロールや、ウィンドウがないコントロールのオーナーのウィ\r
1568             ///   ンドウハンドルを認識しない場合、ドキュメントは一致するウィンドウハンド\r
1569             ///   ルをもてない。呼び出し元は メソッドが成功したとしても o_hwnd パラメー\r
1570             ///   タに非 NULL 値を受け取ると想定してはいけない。\r
1571             /// </remark>\r
1572         void GetWnd(\r
1573             [In] int            i_viewCookie,\r
1574             [Out] out IntPtr    o_hwnd\r
1575         );\r
1576     }\r
1577 #endif\r
1578 \r
1579 \r
1580     //============================================================================\r
1581     /// <summary>\r
1582     /// テキストストア\r
1583     /// </summary>\r
1584     [ComImport,\r
1585      InterfaceType(ComInterfaceType.InterfaceIsIUnknown),\r
1586      Guid("f86ad89f-5fe4-4b8d-bb9f-ef3797a84f1f")\r
1587     ]\r
1588     public interface ITextStoreACP2\r
1589     {\r
1590         /// <summary>\r
1591         /// ITextStoreACP2::AdviseSink\r
1592         /// </summary>\r
1593         /// <param name="i_riid"></param>\r
1594         /// <param name="i_unknown"></param>\r
1595         /// <param name="i_mask"></param>\r
1596         void AdviseSink(\r
1597             [In] ref Guid i_riid,\r
1598             [In, MarshalAs(UnmanagedType.Interface)] object i_unknown,\r
1599             [In] AdviseFlags i_mask\r
1600         );\r
1601         /// <summary>\r
1602         /// ITextStoreACP2::UnadviseSink\r
1603         /// </summary>\r
1604         /// <param name="i_unknown"></param>\r
1605         void UnadviseSink(\r
1606             [In, MarshalAs(UnmanagedType.Interface)] object i_unknown\r
1607         );\r
1608         /// <summary>\r
1609         /// ITextStoreACP2::RequestLock\r
1610         /// </summary>\r
1611         /// <param name="i_lockFlags"></param>\r
1612         /// <param name="o_sessionResult"></param>\r
1613         void RequestLock(\r
1614             [In] LockFlags i_lockFlags,\r
1615             [Out, MarshalAs(UnmanagedType.Error)] out int o_sessionResult\r
1616         );\r
1617         /// <summary>\r
1618         /// ITextStoreACP2::GetStatus\r
1619         /// </summary>\r
1620         /// <param name="o_documentStatus"></param>\r
1621         void GetStatus(\r
1622             [Out] out TS_STATUS o_documentStatus\r
1623         );\r
1624         /// <summary>\r
1625         /// ITextStoreACP2::QueryInsert\r
1626         /// </summary>\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
1632         void QueryInsert(\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
1638         );\r
1639         /// <summary>\r
1640         /// ITextStoreACP2::GetSelection\r
1641         /// </summary>\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
1647             [In] int i_index,\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
1651         );\r
1652         /// <summary>\r
1653         /// ITextStoreACP2::SetSelection\r
1654         /// </summary>\r
1655         /// <param name="i_count"></param>\r
1656         /// <param name="i_selections"></param>\r
1657         void SetSelection(\r
1658             [In] int i_count,\r
1659             [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] TS_SELECTION_ACP[] i_selections\r
1660         );\r
1661         /// <summary>\r
1662         /// ITextStoreACP2::GetText\r
1663         /// </summary>\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
1673         void GetText(\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
1683         );\r
1684         /// <summary>\r
1685         /// ITextStoreACP2::SetText\r
1686         /// </summary>\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
1693         void SetText(\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
1700         );\r
1701         /// <summary>\r
1702         /// ITextStoreACP2::GetFormattedText\r
1703         /// </summary>\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
1708             [In] int i_start,\r
1709             [In] int i_end,\r
1710             [Out, MarshalAs(UnmanagedType.Interface)] out object o_obj\r
1711         );\r
1712         /// <summary>\r
1713         /// ITextStoreACP2::GetEmbedded\r
1714         /// </summary>\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
1719         void GetEmbedded(\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
1724         );\r
1725         /// <summary>\r
1726         /// ITextStoreACP2::QueryInsertEmbedded\r
1727         /// </summary>\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
1735         );\r
1736         /// <summary>\r
1737         /// ITextStoreACP2::InsertEmbedded\r
1738         /// </summary>\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
1746             [In] int i_start,\r
1747             [In] int i_end,\r
1748             [In, MarshalAs(UnmanagedType.Interface)] object i_obj,\r
1749             [Out] out TS_TEXTCHANGE o_textChange\r
1750         );\r
1751         /// <summary>\r
1752         /// ITextStoreACP2::InsertTextAtSelection\r
1753         /// </summary>\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
1767         );\r
1768         /// <summary>\r
1769         /// ITextStoreACP2::InsertEmbeddedAtSelection\r
1770         /// </summary>\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
1779             out int start,\r
1780             out int end,\r
1781             out TS_TEXTCHANGE change\r
1782         );\r
1783         /// <summary>\r
1784         /// ITextStoreACP2::RequestSupportedAttrs\r
1785         /// </summary>\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
1793         );\r
1794         /// <summary>\r
1795         /// ITextStoreACP2::RequestAttrsAtPosition\r
1796         /// </summary>\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
1806         );\r
1807         /// <summary>\r
1808         /// ITextStoreACP2::RequestAttrsTransitioningAtPosition\r
1809         /// </summary>\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
1819         );\r
1820         /// <summary>\r
1821         /// ITextStoreACP2::FindNextAttrTransition\r
1822         /// </summary>\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
1832             [In] int i_start,\r
1833             [In] int i_halt,\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
1840         );\r
1841         /// <summary>\r
1842         /// ITextStoreACP2::RetrieveRequestedAttrs\r
1843         /// </summary>\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
1851         );\r
1852         /// <summary>\r
1853         /// ITextStoreACP2::GetEndACP\r
1854         /// </summary>\r
1855         /// <param name="o_length"></param>\r
1856         void GetEndACP(\r
1857             [Out] out int o_length\r
1858         );\r
1859         /// <summary>\r
1860         /// ITextStoreACP2::GetActiveView\r
1861         /// </summary>\r
1862         /// <param name="o_viewCookie"></param>\r
1863         void GetActiveView(\r
1864             [Out] out int o_viewCookie\r
1865         );\r
1866         /// <summary>\r
1867         /// ITextStoreACP2::GetACPFromPoint\r
1868         /// </summary>\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
1878         );\r
1879         /// <summary>\r
1880         /// ITextStoreACP2::GetTextExt\r
1881         /// </summary>\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
1887         void GetTextExt(\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
1893         );\r
1894         /// <summary>\r
1895         /// ITextStoreACP2::GetScreenExt\r
1896         /// </summary>\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
1902         );\r
1903     }\r
1904     //============================================================================\r
1905 \r
1906     \r
1907     /// <summary>\r
1908     /// コンポジション関連の通知を受け取るためにアプリケーション側で実装される\r
1909     /// インターフェイス。\r
1910     /// \r
1911     /// <para>\r
1912     ///   ITfDocumentMgr::CreateContext() が呼ばれた時に TSF マネージャは\r
1913     ///   ITextStoreACP に対してこのインターフェイスを問い合わせる。\r
1914     /// </para>\r
1915     /// </summary>\r
1916     [ComImport,\r
1917      Guid("5F20AA40-B57A-4F34-96AB-3576F377CC79"),\r
1918      InterfaceType(ComInterfaceType.InterfaceIsIUnknown)\r
1919     ]\r
1920     public interface ITfContextOwnerCompositionSink\r
1921     {\r
1922         /// <summary>\r
1923         ///   コンポジションが開始された時に TSF マネージャから呼ばれる。\r
1924         /// </summary>\r
1925         /// \r
1926         /// <param name="i_view">\r
1927         ///   新しいコンポジションを表す ITfCompositionView へのポインタ。\r
1928         /// </param>\r
1929         /// \r
1930         /// <param name="o_ok">\r
1931         ///   新しいコンポジションを許可するかどうかを受け取る。true の\r
1932         ///   場合はコンポジションを許可し、false の場合は許可しない。\r
1933         /// </param>\r
1934         void OnStartComposition(\r
1935             [In] ITfCompositionView                         i_view,\r
1936             [Out, MarshalAs(UnmanagedType.Bool)] out bool   o_ok\r
1937         );\r
1938 \r
1939 \r
1940         /// <summary>\r
1941         ///   既存のコンポジションが変更された時に TSF マネージャから呼ばれる。\r
1942         /// </summary>\r
1943         /// \r
1944         /// <param name="i_view">\r
1945         ///   更新されるコンポジションを表す ITfCompositionView へのポインタ。\r
1946         /// </param>\r
1947         /// \r
1948         /// <param name="i_rangeNew">\r
1949         ///   コンポジションが更新された後にコンポジションがカバーするテキスト\r
1950         ///   の範囲を含む ITfRange へのポインタ。\r
1951         /// </param>\r
1952         void OnUpdateComposition(\r
1953             [In] ITfCompositionView i_view,\r
1954             [In] ITfRange i_rangeNew\r
1955         );\r
1956 \r
1957 \r
1958         /// <summary>\r
1959         ///   コンポジションが終了した時に TSF マネージャから呼ばれる。\r
1960         /// </summary>\r
1961         /// <param name="i_view">\r
1962         ///   終了したコンポジションを表す ITfCompositionView へのポインタ。\r
1963         /// </param>\r
1964         void OnEndComposition(\r
1965             [In] ITfCompositionView i_view\r
1966         );\r
1967     }\r
1968 \r
1969 \r
1970 //============================================================================\r
1971 \r
1972 \r
1973     /// <summary>\r
1974     /// ITextStoreACP::AdviseSink() で渡されるシンクのインターフェイス。\r
1975     /// </summary>\r
1976     [ComImport,\r
1977      Guid("22d44c94-a419-4542-a272-ae26093ececf"),\r
1978      InterfaceType(ComInterfaceType.InterfaceIsIUnknown)\r
1979     ]\r
1980     public interface ITextStoreACPSink\r
1981     {\r
1982         /// <summary>\r
1983         /// テキストが変更された時に呼び出される。\r
1984         /// </summary>\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
1991         );\r
1992 \r
1993 \r
1994         /// <summary>\r
1995         /// ドキュメント内部で選択が変更された時に呼び出される。\r
1996         /// </summary>\r
1997         [SecurityCritical]\r
1998         void OnSelectionChange();\r
1999 \r
2000 \r
2001 \r
2002         /// <summary>\r
2003         /// ドキュメントのレイアウトが変更された時に呼び出される。\r
2004         /// </summary>\r
2005         /// \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
2012         );\r
2013 \r
2014         \r
2015         /// <summary>\r
2016         /// ステータスが変更された時に呼び出される。\r
2017         /// </summary>\r
2018         /// \r
2019         /// <param name="i_flags">新しいステータスフラグ。</param>\r
2020         [SecurityCritical]\r
2021         void OnStatusChange(\r
2022             [In] DynamicStatusFlags i_flags\r
2023         );\r
2024 \r
2025 \r
2026         /// <summary>\r
2027         /// 一つ以上の属性が変更された時に呼び出される。\r
2028         /// </summary>\r
2029         /// \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
2036             [In] int                                                        i_start,\r
2037             [In] int                                                        i_end,\r
2038             [In] int                                                        i_length,\r
2039             [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=2)] Guid[] i_attributes\r
2040         );\r
2041 \r
2042         \r
2043         /// <summary>\r
2044         /// ITextStoreACP::RequestLock() でロックが成功した場合に呼び出される。\r
2045         /// </summary>\r
2046         /// \r
2047         /// <param name="i_flags">ロックフラグ。</param>\r
2048         /// \r
2049         /// <returns>HRESULT のエラーコード。</returns>\r
2050         [PreserveSig, SecurityCritical]\r
2051         int OnLockGranted(\r
2052             [In] LockFlags i_flags\r
2053         );\r
2054 \r
2055 \r
2056         /// <summary>\r
2057         /// エディットトランザクションが開始された時に呼び出される。\r
2058         /// \r
2059         /// <pre>\r
2060         ///   エディットトランザクションは、一度に処理されるべきテキストの変更\r
2061         ///   のグループ。ITextStoreACPSink::OnStartEditTransaction() 呼び出し\r
2062         ///   は、テキストサービスに ITextStoreACPSink::OnEndEditTransaction()\r
2063         ///   が呼ばれるまで、テキストの変更通知をキューに入れさせることが\r
2064         ///   できる。ITextStoreACPSink::OnEndEditTransaction() が呼び出される\r
2065         ///   と、キューに入れられた変更通知はすべて処理される。\r
2066         /// </pre>\r
2067         /// \r
2068         /// <pre>\r
2069         ///   エディットトランザクションの実装は任意。\r
2070         /// </pre>\r
2071         /// </summary>\r
2072         [SecurityCritical]\r
2073         void OnStartEditTransaction();\r
2074 \r
2075 \r
2076         /// <summary>\r
2077         /// エディットトランザクションが終了した時に呼び出される。\r
2078         /// </summary>\r
2079         /// \r
2080         /// <pre>\r
2081         ///   エディットトランザクションは、一度に処理されるべきテキストの変更\r
2082         ///   のグループ。ITextStoreACPSink::OnStartEditTransaction() 呼び出し\r
2083         ///   は、テキストサービスに ITextStoreACPSink::OnEndEditTransaction()\r
2084         ///   が呼ばれるまで、テキストの変更通知をキューに入れさせることが\r
2085         ///   できる。ITextStoreACPSink::OnEndEditTransaction() が呼び出される\r
2086         ///   と、キューに入れられた変更通知はすべて処理される。\r
2087         /// </pre>\r
2088         /// \r
2089         /// <pre>\r
2090         ///   エディットトランザクションの実装は任意。\r
2091         /// </pre>\r
2092         [SecurityCritical]\r
2093         void OnEndEditTransaction();\r
2094     }\r
2095 \r
2096 \r
2097 //============================================================================\r
2098 \r
2099 \r
2100     [StructLayout(LayoutKind.Sequential, Pack=4),\r
2101      Guid("E26D9E1D-691E-4F29-90D7-338DCF1F8CEF")\r
2102     ]\r
2103     public struct TF_PERSISTENT_PROPERTY_HEADER_ACP\r
2104     {\r
2105         /// <summary>\r
2106         /// プロパティを識別する GUID。\r
2107         /// </summary>\r
2108         public Guid guidOfType;\r
2109         /// <summary>\r
2110         /// プロパティの開始文字位置。\r
2111         /// </summary>\r
2112         public int  start;\r
2113         /// <summary>\r
2114         /// プロパティの文字数。\r
2115         /// </summary>\r
2116         public int  length;\r
2117         /// <summary>\r
2118         /// プロパティのバイト数。\r
2119         /// </summary>\r
2120         public uint bytes;\r
2121         /// <summary>\r
2122         /// プロパティオーナーによって定義された値。\r
2123         /// </summary>\r
2124         public uint privateValue;\r
2125         /// <summary>\r
2126         /// プロパティオーナーの CLSID。\r
2127         /// </summary>\r
2128         public Guid clsidOfTip;\r
2129     }\r
2130 \r
2131     \r
2132 //============================================================================\r
2133 \r
2134 \r
2135     /// <summary>\r
2136     /// アプリケーション側で実装し、TSF マネージャーがドキュメントを非同期に\r
2137     /// ロードするために使用されるインターフェイス。\r
2138     /// </summary>\r
2139     [ComImport,\r
2140      InterfaceType(ComInterfaceType.InterfaceIsIUnknown), \r
2141      Guid("4EF89150-0807-11D3-8DF0-00105A2799B5")\r
2142     ]\r
2143     public interface ITfPersistentPropertyLoaderACP\r
2144     {\r
2145         /// <summary>\r
2146         /// プロパティをロードするときに使用される。\r
2147         /// </summary>\r
2148         /// \r
2149         /// <param name="i_propertyHeader">\r
2150         ///   ロードするプロパティを識別する TF_PERSISTENT_PROPERTY_HEADER_ACP\r
2151         ///   データ。\r
2152         /// </param>\r
2153         /// \r
2154         /// <param name="o_stream">\r
2155         ///   ストリームオブジェクトの受け取り先。\r
2156         /// </param>\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
2160         );\r
2161     }\r
2162 \r
2163     \r
2164 //============================================================================\r
2165 \r
2166     \r
2167     /// <summary>\r
2168     ///   ACP ベースのアプリケーションにいくつかの機能を提供するために TSF マ\r
2169     ///   ネージャーによって実装されるインターフェイス。\r
2170     ///   <pre>\r
2171     ///     ITextStoreACP::AdviseSink() に渡されるシンクオブジェクトに\r
2172     ///     QueryInterface() をすることで得られる。\r
2173     ///   </pre>\r
2174     /// </summary>\r
2175     [ComImport, \r
2176      InterfaceType(ComInterfaceType.InterfaceIsIUnknown),\r
2177      Guid("AA80E901-2021-11D2-93E0-0060B067B86E")\r
2178     ]\r
2179     public interface ITextStoreACPServices\r
2180     {\r
2181         /// <summary>\r
2182         ///  ITfRange オブジェクトからプロパティを取得して、ストリームオブジェクトに\r
2183         ///  書き出す。\r
2184         /// </summary>\r
2185         void Serialize(\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
2190         );\r
2191 \r
2192 \r
2193         /// <summary>\r
2194         ///  以前にシリアライズされたプロパティデータを取得してプロパティオブジェクトに\r
2195         ///  適用する。\r
2196         /// </summary>\r
2197         void Unserialize(\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
2202         );\r
2203 \r
2204 \r
2205         /// <summary>\r
2206         /// Forces all values of an asynchronously loaded property to be loaded.\r
2207         /// </summary>\r
2208         void ForceLoadProperty(\r
2209             [In, MarshalAs(UnmanagedType.Interface)] ITfProperty    i_property\r
2210         );\r
2211 \r
2212 \r
2213         /// <summary>\r
2214         /// 終了位置と開始位置から ITfRangeACP を生成する。\r
2215         /// </summary>\r
2216         /// <param name="i_startIndex">開始位置。</param>\r
2217         /// <param name="i_endIndex">終了位置。</param>\r
2218         /// <param name="o_range">ITfRangeACP の受け取り先。</param>\r
2219         void CreateRange(\r
2220             [In] int i_startIndex,\r
2221             [In] int i_endIndex,\r
2222             [Out, MarshalAs(UnmanagedType.Interface)] out ITfRangeACP o_range\r
2223         );\r
2224     }\r
2225 \r
2226 \r
2227 }\r