Informazioni sui controlli Rich Edit senza finestra

Un controllo di modifica rtf senza finestra, noto anche come oggetto servizi di testo, è un oggetto che fornisce la funzionalità di un controllo di modifica avanzato senza fornire la finestra. Per fornire la funzionalità di una finestra, ad esempio la possibilità di ricevere messaggi e un contesto di dispositivo in cui può disegnare controlli di modifica rtf senza finestra, usare una coppia di interfacce: ITextServices e ITextHost.

Per creare un controllo rich edit senza finestra, chiamare la funzione CreateTextServices con un puntatore all'implementazione dell'interfaccia ITextHost. CreateTextServices restituisce un puntatore IUnknown su cui è possibile eseguire una query per recuperare un puntatore all'implementazione ITextServices del controllo senza finestra.

Msftedit.dll esporta un identificatore di interfaccia (IID) denominato IID_ITextServices che è possibile usare per eseguire una query sul puntatore IUnknown per l'interfaccia ITextServices. Nell'esempio seguente viene illustrato come recuperare IID_ITextServices e usarlo per ottenere l'interfaccia 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 esporta anche un identificatore di interfaccia (IID) denominato IID_ITextHost che può essere usato in modo simile per eseguire una query per l'interfaccia ITextHost.

L'interfaccia ITextHost include metodi che chiamano il controllo senza finestra per recuperare informazioni sulla finestra. Ad esempio, l'oggetto servizi di testo chiama il metodo TxGetDC per recuperare un contesto di dispositivo in cui può disegnare. Il controllo senza finestra chiama il metodo TxNotify per inviare notifiche, ad esempio i messaggi di notifica rich edit, all'host di testo. L'oggetto servizi di testo chiama altri metodi ITextHost per richiedere all'host di testo di eseguire altri servizi correlati alla finestra. Ad esempio, il metodo TxInvalidateRect richiede all'host di testo di aggiungere un rettangolo all'area di aggiornamento della finestra.

Un controllo rich edit standard include una routine finestra che elabora messaggi di sistema e messaggi dall'applicazione. È possibile utilizzare l'handle della finestra del controllo per inviarli per l'esecuzione di modifiche di testo e altre operazioni. Tuttavia, un controllo di modifica rtf senza finestra non dispone di una routine finestra per ricevere ed elaborare i messaggi. Fornisce invece un'interfaccia ITextServices . Per inviare messaggi a un controllo rich edit senza finestra, chiamare il metodo TxSendMessage. È possibile utilizzare questo metodo per inviare uno qualsiasi dei messaggi di modifica avanzati o per passare altri messaggi che influiscono sul controllo, ad esempio i messaggi di sistema per l'input del mouse o della tastiera.

È anche possibile creare l'oggetto servizi di testo come parte di un oggetto aggregato COM. In questo modo è facile aggregare l'oggetto servizi di testo con un oggetto COM (Component Object Model) senza finestra.