Freigeben über


Verwenden von Streams

Sie können Datenströme verwenden, um Daten in oder aus einem Rich-Bearbeitungssteuerelement zu übertragen. Ein Stream wird durch eine EDITSTREAM-Struktur definiert, die einen Puffer und eine anwendungsdefinierte Rückruffunktion angibt.

Verwenden Sie die EM_STREAMIN Nachricht, um Daten in ein Rich-Edit-Steuerelement (d. h. Datenstrom in den Daten) zu lesen. Das Steuerelement ruft wiederholt die Rückruffunktion der Anwendung auf, die jedes Mal einen Teil der Daten in den Puffer überträgt.

Zum Speichern des Inhalts eines Rich-Edit-Steuerelements (d. h. Streamen der Daten) können Sie die EM_STREAMOUT Nachricht verwenden. Das Steuerelement schreibt wiederholt in den Puffer und ruft dann die Rückruffunktion der Anwendung auf. Bei jedem Aufruf speichert die Rückruffunktion den Inhalt des Puffers.

Wichtige Informationen

Technologien

Voraussetzungen

  • C/C++
  • Programmierung der Windows-Benutzeroberfläche

Anweisungen

Verwenden eines Streams

Das folgende Codebeispiel zeigt, wie eine RTF-Datei in ein Rich-Edit-Steuerelement gelesen wird. Das Dateihandle wird über das dwCookie-Element der EDITSTREAM-Struktur an die Rückruffunktion übergeben.

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

Verwenden von Rich Edit-Steuerelementen

Demo allgemeiner Windows-Steuerelemente (CppWindowsCommonControls)