2 using System.Collections.Generic;
\r
5 using System.Diagnostics;
\r
6 using System.Reflection;
\r
7 using System.Runtime.InteropServices;
\r
8 using System.Globalization;
\r
10 using DotNetTextStore.UnmanagedAPI.TSF;
\r
11 using DotNetTextStore.UnmanagedAPI.TSF.TextStore;
\r
12 using DotNetTextStore.UnmanagedAPI.WinDef;
\r
13 using DotNetTextStore.UnmanagedAPI.WinError;
\r
15 namespace DotNetTextStore
\r
19 //========================================================================================
\r
22 /// テキストストアの実装を担うクラス。
\r
24 /// 各ドキュメント毎に実装すべき部分をイベントとして切り離して、テキストストアの実装を楽に
\r
28 /// 使用側としては各イベントハンドラの実装、フォーカスを取得した時に SetFocus() メソッドの
\r
29 /// 呼び出し、選択やテキストが変更された時に NotifySelectionChanged() メソッドや
\r
30 /// NotifyTextChange() メソッドの呼び出しを行う必要がある。
\r
32 public sealed class TextStore : TextStoreBase,IDisposable, ITextStoreACP, ITfContextOwnerCompositionSink
\r
34 public delegate IntPtr GetHWndHandler();
\r
35 public event GetHWndHandler GetHWnd;
\r
41 public void Dispose()
\r
43 base.Dispose(false);
\r
44 GC.SuppressFinalize(this);
\r
48 #region ITextStoreACPの実装
\r
49 public void GetWnd(int i_viewCookie, out IntPtr o_hwnd)
\r
51 #if TSF_DEBUG_OUTPUT
\r
52 using(var dbgout = new DebugOut("{0}()", DebugOut.GetCaller()) )
\r
55 if (GetHWnd != null)
\r
58 o_hwnd = IntPtr.Zero;
\r
63 #region TSF 関連のラッパメソッド
\r
68 /// <exception cref="COMException">
\r
69 /// スレッドマネージャーの生成に失敗した場合。
\r
71 protected override void CreateThreadMgr()
\r
73 if( _threadMgr == null )
\r
75 TextFrameworkFunctions.TF_GetThreadMgr(out _threadMgr);
\r
76 if( _threadMgr == null )
\r
78 Type clsid = Marshal.GetTypeFromCLSID(TfDeclarations.CLSID_TF_ThreadMgr);
\r
79 _threadMgr = Activator.CreateInstance(clsid) as ITfThreadMgr;
\r
81 if( _threadMgr == null )
\r
83 const string message = "スレッドマネージャーの生成に失敗しました。";
\r
84 Debug.WriteLine(message);
\r
85 throw new COMException(message, HRESULT.E_NOTIMPL);
\r