RichEdit に EM_STREAMIN で入力

DialogBox の RichEdit から EM_STREAMIN で TEXT FILE を入力します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. RichEdit に TEXT を表示 では、文字列を定数で定義しましたが、 直接ファイルから入力して表示します。
    基本的なプログラムは、そちらを参照して下さい。
  2. RichEdit に表示する data.txt ファイルです。
    プロジェクトのフォルダーに格納して下さい。
    Rich Edit Strem Input
    0123456789
    abcdefghijklmn
    OPQRSTUVWXYZ
    漢字コード
    ファイルから直接入力
    
  3. WM_INITDIALOG: から RichEdit に直接ファイルから入力する関数 Open() を呼び出します。
        {   case WM_INITDIALOG:
                g_hEdit= GetDlgItem(hDlg,IDC_RICHEDIT21);
                Open();
                break;
    
  4. Open() 関数では、HANDLE をオープンして EM_STREAMIN を実行します。
    このとき EDITSTREAM の dwCookie に HANDLE を、pfnCallback に CALLBACK 関数を設定して下さい。
    TEXT FILE のときは SF_TEXT を、RichEdit FILE のときは SF_RTF を指定します。
    VOID Open()
    {
        EDITSTREAM es;
        HANDLE     hFile;
    
        // ファイルをオープンする。
        hFile = CreateFile("data.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if ( hFile )
        {   // EDITSTREAM構造体を設定する。
            es.dwCookie = (DWORD)hFile;
            es.dwError  = 0;
            es.pfnCallback = ReadProc;
    
            // ファイルからデータを読み込む。
            SendMessage(g_hEdit, EM_STREAMIN, SF_TEXT, (LPARAM)&es);
            // 変更フラグをクリアする。
            SendMessage(g_hEdit, EM_SETMODIFY, 0, 0);
            CloseHandle(hFile);
        }
        else    MessageBox(NULL, "data.txt Open Error", "Error Message", MB_OK);
    }
    
  5. RichEdit から呼び出される CALLBACK 関数です。
    ここで ReadFile() 関数を使ってデータを入力します。
    データの入力は、適当なサイズに分けて何度か呼び出されます。
    return( FALSE ); は失敗ではなく、ゼロをリターンしています。
    中止するときは「非ゼロ」をリターンします。
    DWORD CALLBACK ReadProc(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG* pcb)
    {
        ReadFile((HANDLE)dwCookie, pbBuff, cb, (DWORD*)pcb, NULL);
        return( FALSE );
    }
    

超初心者のプログラム入門(Win32API C++)