共用方式為


如何使用數據流

您可以使用資料流將資料匯入或匯出豐富編輯控制項。 數據流是由 EDITSTREAM 結構所定義,其會指定緩衝區和應用程式定義的回呼函式。

若要將數據讀入豐富文本編輯控制(即流式傳輸數據),請使用 EM_STREAMIN 訊息。 控制程式會重複呼叫應用程式的回呼函式,每次將數據部分傳輸至緩衝區。

若要儲存豐富文本編輯器的內容(即將資料匯出),您可以使用 EM_STREAMOUT 訊息。 控件會重複寫入緩衝區,然後呼叫應用程式的回呼函式。 針對每個呼叫,回呼函式會儲存緩衝區的內容。

您需要知道的事項

技術

先決條件

  • C/C++
  • Windows 使用者介面程序設計

指示

使用串流

下列程式代碼範例示範如何將.rtf檔案讀入豐富的編輯控件。 檔案句柄會透過 EDITSTREAM 結構的 dwCookie 成員傳遞至回呼函式。

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

使用豐富的編輯控制元素

Windows 通用控件示範 (CppWindowsCommonControls)