ウィンドウレスリッチエディットコントロールについて
ウィンドウなしのリッチ エディット コントロール (テキスト サービス オブジェクトとも呼ばれます) は、ウィンドウを提供せずに リッチ エディット コントロール の機能を提供するオブジェクトです。 ウィンドウの機能 (メッセージを受信する機能や描画可能なデバイス コンテキストなど) を提供するために、ウィンドウレスのリッチエディット コントロールでは、ITextServicesと ITextHostインターフェイスのペアを使用します。
ウィンドウレスのリッチ エディット コントロールを作成するには、ITextHost インターフェイスの実装へのポインターを使用して、CreateTextServices 関数を呼び出します。 CreateTextServices は、IUnknown ポインターを返します。このポインターを照会して、ウィンドウレス コントロールの実装ITextServices へのポインターを取得できます。
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 は、IID_ITextHost と呼ばれるインターフェイス識別子 (IID) もエクスポートします。この ID は、ITextHost インターフェイスを照会するために同様の方法で使用できます。
ITextHost インターフェイスには、ウィンドウに関する情報を取得するためにウィンドウレス コントロールが呼び出すメソッドがあります。 たとえば、テキスト サービス オブジェクトは、TxGetDC メソッドを呼び出して、描画できるデバイス コンテキストを取得します。 ウィンドウレス コントロールは、TxNotify メソッドを呼び出して、リッチエディット通知メッセージなどの通知をテキスト ホストに送信します。 テキスト サービス オブジェクトは、他の ITextHost メソッドを呼び出して、他のウィンドウ関連のサービスを実行するようにテキスト ホストに要求します。 たとえば、TxInvalidateRect メソッドは、ウィンドウの更新領域に四角形を追加するようにテキスト ホストに要求します。
標準のリッチ エディット コントロールには、アプリケーションからのシステム メッセージとメッセージを処理するウィンドウ プロシージャがあります。 コントロールのウィンドウ ハンドルを使用して、テキスト編集やその他の操作を実行するためのメッセージを送信できます。 ただし、ウィンドウレスのリッチエディット コントロールには、メッセージを受信して処理するウィンドウ プロシージャはありません。 代わりに、ITextServices インターフェイスを提供します。 ウィンドウレスのリッチ エディット コントロールにメッセージを送信するには、TxSendMessage メソッドを呼び出します。 このメソッドを使用すると、リッチエディット メッセージを送信したり、マウスやキーボード入力のシステム メッセージなど、コントロールに影響を与える他のメッセージを渡したりすることができます。
また、COM 集計オブジェクトの一部としてテキスト サービス オブジェクトを作成することもできます。 これにより、ウィンドウレス コンポーネント オブジェクト モデル (COM) オブジェクトを使用してテキスト サービス オブジェクトを簡単に集計できます。