스트림 사용 방법

스트림을 사용하여 서식 있는 편집 컨트롤 안팎으로 데이터를 전송할 수 있습니다. 스트림은 버퍼 및 애플리케이션에서 정의되는 콜백 함수를 지정하는 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)