Использование Потоки
Потоки можно использовать для передачи данных в элемент управления с расширенными возможностями редактирования или из него. Поток определяется структурой EDITSTREAM , которая задает буфер и функцию обратного вызова, определяемую приложением.
Чтобы считывать данные в элемент управления расширенными изменениями (т. е. потоковая передача данных), используйте сообщение EM_STREAMIN . Элемент управления неоднократно вызывает функцию обратного вызова приложения, которая передает часть данных в буфер каждый раз.
Чтобы сохранить содержимое элемента управления расширенными изменениями (т. е. потоковая передача данных), можно использовать сообщение EM_STREAMOUT. Элемент управления многократно записывает в буфер, а затем вызывает функцию обратного вызова приложения. Для каждого вызова функция обратного вызова сохраняет содержимое буфера.
Это важно знать
Технологии
Необходимые компоненты
- C/C++
- Программирование пользовательского интерфейса Windows
Instructions
Использование потока
В следующем примере кода показано, как считывать файл .rtf в элемент управления расширенными изменениями. Дескриптор файла передается функции обратного вызова через член dwCookie структуры 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;
}
См. также