Cómo proporcionar controles de edición enriquecidas sin ventanas con funcionalidad de ventana

La funcionalidad de ventana incluye la capacidad de recibir mensajes y la propiedad de un contexto de dispositivo en el que se va a dibujar. Los controles de edición enriquecidos sin ventanas reciben esta funcionalidad mediante un par de interfaces: ITextServices e ITextHost.

Lo que necesita saber

Tecnologías

Requisitos previos

  • C/C++
  • Programación de la interfaz de usuario de Windows

Instrucciones

Establecimiento de la funcionalidad de ventana

En el código de ejemplo siguiente se muestra cómo crear el host de texto y los servicios de texto.

    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. 
    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;

Comentarios

El parámetro hmodRichEdit del ejemplo de código es un identificador para el módulo Msftedit.dll y se supone que este identificador ya se ha recuperado mediante una llamada a la función GetModuleHandle .

Ejemplo completo

Usar controles de edición enriquecida sin ventanas

Uso de controles de edición enriquecida

Demostración de controles comunes de Windows (CppWindowsCommonControls)