Jak używać strumieni
Strumienie umożliwiają transferowanie danych do lub z kontrolki edycji wzbogaconej. Strumień jest definiowany przez strukturę EDITSTREAM, która określa bufor i funkcję wywołania zwrotnego zdefiniowanego przez aplikację.
Aby odczytać dane do kontrolki edycji wzbogaconej (czyli przesyłając dane), użyj komunikatu EM_STREAMIN. Kontrolka wielokrotnie wywołuje funkcję wywołania zwrotnego aplikacji, która za każdym razem przesyła część danych do buforu.
Aby zapisać zawartość kontrolki edycji wzbogaconej (czyli przesłać strumieniowo dane), możesz użyć komunikatu EM_STREAMOUT. Kontrolka wielokrotnie zapisuje do bufora, a następnie wywołuje funkcję zwrotną aplikacji. Dla każdego wywołania funkcja wywołania zwrotnego zapisuje zawartość buforu.
Co musisz wiedzieć
Technologie
Warunki wstępne
- C/C++
- Programowanie interfejsu użytkownika systemu Windows
Instrukcje
Korzystanie ze strumienia
Poniższy przykład kodu pokazuje, jak odczytać plik .rtf do kontrolki edycji wzbogaconej. Dojście do pliku jest przekazywane do funkcji wywołania zwrotnego za pośrednictwem dwCookie składowej struktury 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;
}
Tematy pokrewne