Informationen zu Fensterlosen Rich Edit-Steuerelementen
Ein fensterloses Rich Edit-Steuerelement, auch als Textdienstobjekt bezeichnet, ist ein Objekt, das die Funktionalität eines Rich Edit-Steuerelements bereitstellt, ohne das Fenster bereitzustellen. Um die Funktionalität eines Fensters bereitzustellen, z. B. die Möglichkeit, Nachrichten und einen Gerätekontext zu empfangen, in den es gezeichnet werden kann, verwenden fensterlose Rich Edit-Steuerelemente ein Paar von Schnittstellen: ITextServices und ITextHost.
Um ein fensterloses Rich Edit-Steuerelement zu erstellen, rufen Sie die CreateTextServices-Funktion mit einem Zeiger auf Ihre Implementierung der ITextHost-Schnittstelle auf. CreateTextServices gibt einen IUnknown-Zeiger zurück, den Sie abfragen können, um einen Zeiger auf die ITextServices-Implementierung des fensterlosen Steuerelements abzurufen.
Msftedit.dll exportiert einen Schnittstellenbezeichner (IID) namens IID _ ITextServices, den Sie zum Abfragen des IUnknown-Zeigers für die ITextServices-Schnittstelle verwenden können. Im folgenden Beispiel wird gezeigt, wie _ IID-ITextServices abgerufen und zum Abrufen der ITextServices-Schnittstelle verwendet werden.
.
.
.
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 exportiert auch einen Schnittstellenbezeichner (INTERFACE Identifier, IID) namens IID _ ITextHost, der auf ähnliche Weise verwendet werden kann, um die ITextHost-Schnittstelle abzufragen.
Die ITextHost-Schnittstelle verfügt über Methoden, die das fensterlose Steuerelement aufruft, um Informationen zu Ihrem Fenster abzurufen. Beispielsweise ruft das Textdienstobjekt die TxGetDC-Methode auf, um einen Gerätekontext abzurufen, in den es zeichnen kann. Das fensterlose Steuerelement ruft die TxNotify-Methode auf, um Benachrichtigungen wie die Rich Edit-Benachrichtigungsmeldungen an den Texthost zu senden. Das Textdienstobjekt ruft andere ITextHost-Methoden auf, um den Texthost anzufordern, andere fensterbezogene Dienste auszuführen. Beispielsweise fordert die TxInvalidateRect-Methode den Texthost an, dem Updatebereich des Fensters ein Rechteck hinzuzufügen.
Ein standardmäßiges Rich Edit-Steuerelement verfügt über eine Fensterprozedur, die Systemmeldungen und Nachrichten aus Ihrer Anwendung verarbeitet. Sie können das Fensterhandle des Steuerelements verwenden, um Nachrichten für die Textbearbeitung und andere Vorgänge zu senden. Ein fensterloses Rich Edit-Steuerelement verfügt jedoch über keine Fensterprozedur zum Empfangen und Verarbeiten von Nachrichten. Stattdessen stellt sie eine ITextServices-Schnittstelle bereit. Um Nachrichten an ein fensterloses Rich Edit-Steuerelement zu senden, rufen Sie die TxSendMessage-Methode auf. Sie können diese Methode verwenden, um alle Rich-Edit-Nachrichten zu senden oder andere Nachrichten zu übergeben, die sich auf das Steuerelement auswirken, z. B. Systemmeldungen für Maus- oder Tastatureingaben.
Sie können das Textdienstobjekt auch als Teil eines COM-aggregierten Objektserstellen. Dies erleichtert das Aggregieren des Textdienstobjekts mit einem FENSTERLOSEN COMPONENT OBJECT MODEL -Objekt (COM).