Udostępnij za pośrednictwem


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

  • kontrolek systemu Windows

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

Używanie kontrolek rozszerzonej edycji

pokaz wspólnych kontrolek systemu Windows (CppWindowsCommonControls)