Come usare i flussi
È possibile usare i flussi per trasferire i dati da o verso un controllo di modifica avanzato. Un flusso è definito da una struttura diEDITSTREAM, che specifica un buffer e una funzione di callback definita dall'applicazione.
Per leggere i dati in un controllo di modifica avanzato, ovvero importare i dati, usare il messaggio EM_STREAMIN. Il controllo chiama ripetutamente la funzione di callback dell'applicazione, che trasferisce ogni volta una parte dei dati nel buffer.
Per salvare il contenuto di un controllo rich text (ovvero trasmettere i dati), è possibile usare il messaggio EM_STREAMOUT. Il controllo scrive ripetutamente nel buffer e quindi chiama la funzione di callback dell'applicazione. Per ogni chiamata, la funzione di callback salva il contenuto del buffer.
Cosa è necessario sapere
Tecnologie
Prerequisiti
- C/C++
- Programmazione dell'interfaccia utente di Windows
Disposizioni
Usare un flusso
Nell'esempio di codice seguente viene illustrato come leggere un file .rtf in un controllo di modifica avanzato. L'handle di file viene passato alla funzione di callback tramite il dwCookie membro della struttura 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;
}
Argomenti correlati