Verwenden von Streams
Sie können Datenströme verwenden, um Daten in ein oder aus einem Rich-Edit-Steuerelement 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 zu lesen (d. h. die Daten zu streamen). 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. Für jeden Aufruf speichert die Rückruffunktion den Inhalt des Puffers.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Windows Benutzeroberfläche-Programmierung
Instructions
Verwenden eines Streams
Das folgende Codebeispiel zeigt, wie eine RTF-Datei in ein Rich-Edit-Steuerelement gelesen wird. Das Dateihandle wird über den dwCookie-Member 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;
}