다음을 통해 공유


스트림을 사용하는 방법

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