Share via


Informationen zu fensterlosen Rich Edit-Steuerelementen

Ein fensterloses Rich-Bearbeitungssteuerelement, auch als Textdienstobjekt bezeichnet, ist ein Objekt, das die Funktionalität eines umfassenden Bearbeitungssteuerelements bereitstellt, ohne das Fenster bereitzustellen. Um die Funktionalität eines Fensters bereitzustellen, z. B. die Möglichkeit, Nachrichten zu empfangen, und einen Gerätekontext, in den es zeichnen kann, verwenden fensterlose Rich-Bearbeitungssteuerelemente zwei 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 (Interface Identifier, IID) namens IID_ITextServices , mit dem Sie den IUnknown-Zeiger für die ITextServices-Schnittstelle abfragen können. Das folgende Beispiel zeigt, wie Sie IID_ITextServices abrufen und verwenden, um die ITextServices-Schnittstelle abzurufen.

    .
    .
    .
    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 wie abfragen für die ITextHost-Schnittstelle verwendet werden kann.

Die ITextHost-Schnittstelle verfügt über Methoden, die das fensterlose Steuerelement aufruft, um Informationen zu Ihrem Fenster abzurufen. Beispielsweise ruft das Text services-Objekt die TxGetDC-Methode auf, um einen Gerätekontext abzurufen, in den es zeichnen kann. Das fensterlose Steuerelement ruft die TxNotify-Methode auf, um Benachrichtigungen, z. B. die Rich-Edit-Benachrichtigungen, an den Texthost zu senden. Das Textdienstobjekt ruft andere ITextHost-Methoden auf, um den Texthost anzufordern, andere fensterbezogene Dienste auszuführen. Die TxInvalidateRect-Methode fordert beispielsweise den Texthost auf, 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 wird eine ITextServices-Schnittstelle bereitgestellt. Um Nachrichten an ein fensterloses Rich-Bearbeitungssteuerelement zu senden, rufen Sie die TxSendMessage-Methode auf. Sie können diese Methode verwenden, um eine der umfangreichen Bearbeitungsnachrichten zu senden oder andere Nachrichten zu übergeben, die sich auf das Steuerelement auswirken, z. B. Systemnachrichten für Maus- oder Tastatureingaben.

Sie können das Textdienstobjekt auch als Teil eines COM-aggregierten Objekts erstellen. Dies erleichtert das Aggregieren des Textdienstobjekts mit einem fensterlosen COM-Objekt (Component Object Model).