RichEdit で TEXT を表示

DialogBox に RichEdit を貼り付けて TEXT を表示します。

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

プロジェクトの設定

  1. RichEdit には「文字列の検索/置き換え、特定の文字列の色やサイズを変えて表示、データの入力と出力」 などの機能が備わっています。
  2. 新規プロジェクトから空のプロジェクトを作成します。
    [プロジェクト][リソースの追加][Dialog][新規作成]で DialogBoxを作成します。
    [OK][キャンセル] ボタンをウインドウの下部に移動して、[Rich Edit2] を全体に貼り付けて下さい。
  3. プロパティから以下の制御を True に設定して下さい。
  4. 後部のリンクからソースコードを取得して [プロジェクト][既存項目の追加] からプロジェクトに追加します。
  5. [デバッグ] を選択してビルドに続いて実行すると、定義した文字列が表示されます。

プログラムの説明

  1. RichEdit を使うときは richedit.h をインクルードします。
    g_hEdit; が Rich Edit の Handle です。
    g_buf が表示する文字列です。
    #include <richedit.h>
    HWND        g_hEdit;        //Rich Edit Handle
    LPSTR       g_buf=
    {   "Rich Edit Box\n"
        "0123456789\n"
        "abcdefghijklmn\n"
        "OPQRSTUVWXYZ\n"
        "漢字コード\n"
    };
    
  2. WinMain() で RICHED32.DLL をロードして DialogBox を呼び出します。
    終了時に RICHED32.DLL を開放して下さい。
    int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow )
    {   HMODULE hModule;
    
        hModule= LoadLibrary("RICHED32.DLL");
        if (hModule==NULL)  return FALSE;
        DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DialogProc);
        FreeLibrary(hModule);
        return TRUE;
    }
    
  3. DialogBox のコールバック関数です。
    WM_INITDIALOG: で Rich Edit の Handle を取得します。
    SetWindowText() で TEXT 文字列を表示します。
    LRESULT CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
    {
        switch(msg)
        {   case WM_INITDIALOG:
                g_hEdit= GetDlgItem(hDlg,IDC_RICHEDIT21);
                SetWindowText(g_hEdit,g_buf);
                break;
            case WM_COMMAND:
                switch(LOWORD(wParam))
                {   case IDOK:
                        PostMessage(hDlg,WM_CLOSE,0,0);
                        return TRUE;
                    case IDCANCEL:
                        break;
                }
                break;
            case WM_CLOSE:
                EndDialog(hDlg,TRUE);
                return TRUE;
        }
        return FALSE;
    }
    

【NOTE】

ネットのページに、こんな記述がありました。
試してみた所 Riched32.dll を使うのが無難なようです。
DLL Name RichEdit version Richedit Class Name
Riched32.dll 1.0 95/98/Me/NT
RichEd20.dll 2.0 98/NT
RichEd20.dll 3.0 Me/2000/XP/XP SPI
Msftedit.dll 4.1 XP SPI

このプログラムでは Riched32.dll だけをロードしているですが、vista でプログラムの実行履歴を調べると、 Riched32.dll に続いて RichEd20.dll もロードされているようです。
int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow )
{   HMODULE hModule;

    hModule= LoadLibrary("RICHED32.DLL");
    if (hModule==NULL)  return FALSE;
    DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DialogProc);
    FreeLibrary(hModule);
    return TRUE;
}

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

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