Cómo usar secuencias

Puede usar secuencias para transferir datos dentro o fuera de un control de edición enriquecido. Una secuencia se define mediante una estructura EDITSTREAM , que especifica un búfer y una función de devolución de llamada definida por la aplicación.

Para leer datos en un control de edición enriquecido (es decir, transmitir en los datos), use el mensaje EM_STREAMIN . El control llama repetidamente a la función de devolución de llamada de la aplicación, que transfiere una parte de los datos al búfer cada vez.

Para guardar el contenido de un control de edición enriquecido (es decir, transmitir los datos), puede usar el mensaje EM_STREAMOUT . El control escribe repetidamente en el búfer y, a continuación, llama a la función de devolución de llamada de la aplicación. En cada llamada, la función de devolución de llamada guarda el contenido del búfer.

Lo que necesita saber

Tecnologías

Requisitos previos

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

Instrucciones

Uso de una secuencia

En el ejemplo de código siguiente se muestra cómo leer un archivo .rtf en un control de edición enriquecido. El identificador de archivo se pasa a la función de devolución de llamada a través del miembro dwCookie de la estructura EDITSTREAM .

DWORD CALLBACK EditStreamCallback(DWORD_PTR dwCookie, 
                                  LPBYTE lpBuff,
                                  LONG cb, 
                                  PLONG pcb)
{
    HANDLE hFile = (HANDLE)dwCookie;
    
    if (ReadFile(hFile, lpBuff, cb, (DWORD *)pcb, NULL)) 
    {
        return 0;
    }
    
    return -1;
}

BOOL FillRichEditFromFile(HWND hwnd, LPCTSTR pszFile)
{
    BOOL fSuccess = FALSE;
    
    HANDLE hFile = CreateFile(pszFile, GENERIC_READ, 
                              FILE_SHARE_READ, 0, OPEN_EXISTING,
                              FILE_FLAG_SEQUENTIAL_SCAN, NULL);
        
    if (hFile != INVALID_HANDLE_VALUE) 
    {
        EDITSTREAM es = { 0 };
        
        es.pfnCallback = EditStreamCallback;
        es.dwCookie    = (DWORD_PTR)hFile;
        
        if (SendMessage(hwnd, EM_STREAMIN, SF_RTF, (LPARAM)&es) && es.dwError == 0) 
        {
                fSuccess = TRUE;
        }
        
        CloseHandle(hFile);
    }
    
    return fSuccess;
    
}

Usar controles de edición enriquecida

Demostración de controles comunes de Windows (CppWindowsCommonControls)