Come usare Flussi

È possibile usare i flussi per trasferire i dati da o verso un controllo di modifica avanzato. Un flusso è definito da una struttura EDITSTREAM , che specifica un buffer e una funzione di callback definita dall'applicazione.

Per leggere i dati in un controllo di modifica avanzato, ovvero flusso nei dati, usare il messaggio di 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 di modifica rtf, 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.

Informazioni importanti

Tecnologie

Prerequisiti

  • C/C++
  • Programmazione dell'interfaccia utente di Windows

Istruzioni

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

Uso di controlli Rich Edit

Demo dei controlli comuni di Windows (CppWindowsCommonControls)