ウィンドウレス リッチ エディット コントロールについて
ウィンドウレス リッチ エディット コントロール (テキスト サービス オブジェクトとも呼ばれます) は、ウィンドウを提供せずに リッチ エディット コントロール の機能を提供するオブジェクトです。 ウィンドウの機能 (メッセージを受信する機能や描画できるデバイス コンテキストなど) を提供するために、ウィンドウレスのリッチエディット コントロールでは、 ITextServices と ITextHost の 2 つのインターフェイスが使用されます。
ウィンドウレスのリッチエディット コントロールを作成するには、 ITextHost インターフェイスの実装へのポインターを指定して CreateTextServices 関数を呼び出します。 CreateTextServices は、ウィンドウレス コントロールの ITextServices 実装へのポインターを取得するためにクエリを実行できる IUnknown ポインターを返します。
Msftedit.dll は、 ITextServices インターフェイスの IUnknown ポインターのクエリに使用できる、 IID_ITextServices と呼ばれるインターフェイス識別子 (IID) をエクスポートします。 次の例は、 IID_ITextServices を取得し、それを使用して ITextServices インターフェイスを取得する方法を示しています。
.
.
.
HRESULT hr;
IUnknown* pUnk = NULL;
ITextServices* pTextServices = NULL;
// Create an instance of the application-defined object that implements the
// ITextHost interface.
TextHost* pTextHost = new TextHost();
if (pTextHost == NULL)
goto errorHandler;
// Create an instance of the text services object.
hr = CreateTextServices(NULL, pTextHost, &pUnk);
if (FAILED(hr))
goto errorHandler;
// Retrieve the IID_ITextServices interface identifier from
// Msftedit.dll. The hmodRichEdit parameter is a handle to the
// Msftedit.dll module retrieved by a previous call to the
// GetModuleHandle function.
IID* pIID_ITS = (IID*) (VOID*) GetProcAddress(hmodRichEdit,
"IID_ITextServices");
// Retrieve the ITextServices interface.
hr = pUnk->QueryInterface(*pIID_ITS, (void **)&pTextServices);
if (FAILED(hr))
goto errorHandler;
.
.
.
Msftedit.dllは、 ITextHost インターフェイスのクエリに同様の方法で使用できるIID_ITextHost と呼ばれるインターフェイス識別子 (IID) もエクスポートします。
ITextHost インターフェイスには、ウィンドウに関する情報を取得するためにウィンドウレス コントロールが呼び出すメソッドがあります。 たとえば、テキスト サービス オブジェクトは TxGetDC メソッドを呼び出して、描画できるデバイス コンテキストを取得します。 ウィンドウレス コントロールは TxNotify メソッドを呼び出して、リッチエディット通知メッセージなどの通知をテキスト ホストに送信します。 テキスト サービス オブジェクトは、他の ITextHost メソッドを呼び出して、他のウィンドウ関連のサービスを実行するようにテキスト ホストに要求します。 たとえば、 TxInvalidateRect メソッドは、ウィンドウの更新領域に四角形を追加するようにテキスト ホストに要求します。
標準のリッチ エディット コントロールには、アプリケーションからのシステム メッセージとメッセージを処理するウィンドウ プロシージャがあります。 コントロールのウィンドウ ハンドルを使用して、テキスト編集やその他の操作を実行するためのメッセージを送信できます。 ただし、ウィンドウレスのリッチエディット コントロールには、メッセージを受信して処理するウィンドウ プロシージャはありません。 代わりに、 ITextServices インターフェイスを提供します。 ウィンドウレスのリッチ エディット コントロールにメッセージを送信するには、 TxSendMessage メソッドを呼び出します。 このメソッドを使用すると、リッチエディット メッセージを送信したり、マウスやキーボード入力のシステム メッセージなど、コントロールに影響を与える他のメッセージを渡したりすることができます。
また、 COM 集計オブジェクトの一部としてテキスト サービス オブジェクトを作成することもできます。 これにより、ウィンドウレス コンポーネント オブジェクト モデル (COM) オブジェクトを使用してテキスト サービス オブジェクトを簡単に集計できます。