Edit Control で Text Editor を作る

VC++ の DialogBox の EditControl を使って簡単な Text Editor を作成します。

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

プロジェクトの設定

  1. 新規プロジェクトから空のプロジェクト(Dlgedit)を作成します。
    [プロジェクト][リソースの追加][Dialog][新規作成]で DialogBoxを作成します。
    プロジェクトと DialogBox の作成方法は タイトルバーに時刻を表示する を参照して下さい。
  2. [OK][キャンセル]ボタンを削除して、Dialog Box 全体に[EditControl]を貼り付けて下さい。
    説明の画像
  3. 画面左下のプロパティから以下の制御を True に設定して下さい。
    説明の画像
  4. Dlgedit.cpp をフォルダーに格納して[プロジェクト][既存項目の追加]からプロジェクトに追加します。
    テスト用のファイルを TEXT.TXT の名前でフォルダーに格納して下さい。
    内容は何でも良いのですが20行ぐらいのテキストデータをタイプして下さい。
  5. 私は my.lib に登録されている DATAFILE Object Class を使っています。
    my.lib を使うときは、メニューバーから [プロジェクト] [プロパティ] [リンカ] [入力] で追加する依存関係から my.lib を取り込みます。
    読者諸氏が作成するときは Object Class Library から次のファイルを取得してプロジェクトに組み込んで下さい。
    ファイル名 説明
    datafile.h DATAFILE Object Class のヘッダファイル
    datafile.cpp DATAFILE Object Class のプログラムファイル
  6. [デバッグ]を選択してビルドに続いて実行を行います。
    DialogBox にテストデータが表示されたでしょうか?
    メモ張と同じようにマウスで文字列をドラッグで選択してから「右クリック」してみて下さい。
    「コピー」や「ペースト」や「削除」の機能が一人前に備わっています。
    行が増えて BOX から溢れると自動的にスクロールバーが表示されます。
    プログラムを終了すると W.TXT の名前で修正データが書き出されたら完成です。

プログラムの説明

Edit Control には最初から標準的な編集機能が備わっています。
今回はその機能を使って簡単な Text Editor を作ってみました。
  1. コモンダイアログを使うときは commdlg.h が必要ですが、これは my.h の中で取り込んでいます。
    g_buf はデータ入出力用のバッファです。
    DATAFILE DataFile; で DATAFILE Object を定義します。
    Object の説明は Text Object Class を作成する を参照して下さい。
        #include    "my.h"
        #include    "resource.h"
    
        char        g_buf[100000];
        DATAFILE    DataFile;
        
  2. DialogProc() は DialogBox のコールバック関数です。
    WM_INITDIALOG: には DialogBox の初期化のときに制御が渡されます。
    DATAFILE Object の ReadData() で TEXT FILE からデータを入力します。
    DataFile.OpenReadData() に置き換えて見て下さい。
    Windows でお馴染みのファイルオープンダイアログが開いてファイル選択ができるようになります。
    SetDlgItemText() で Edit Control に編集するデータを渡します。
        LRESULT CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
        {
            switch(msg)
            {   case WM_INITDIALOG:
        //            DataFile.ReadData("TEST.TXT",g_buf,100000);
                    DataFile.OpenReadData("C:\\",g_buf,100000);
                    SetDlgItemText(hDlg,IDC_EDIT1,g_buf);
                    break;
        
  3. WM_CLOSE: にはウインドウが閉じられる時に制御が渡されます。
    Edit Control から編集済みのデータを取得して DataFile.WriteData() でファイルに書き出します。
    DataFile.OpenWriteData() に置き換えて見て下さい。
    Windows でお馴染みのファイルオープンダイアログが開いてファイル選択ができるようになります。
        case WM_CLOSE:
            GetDlgItemText(hDlg,IDC_EDIT1,g_buf,sizeof(g_buf));
    //        DataFile.WriteData("W.TXT",g_buf,strlen(g_buf));
            DataFile.OpenWriteData("C:\\",g_buf,strlen(g_buf));
            EndDialog(hDlg, TRUE); 
            return TRUE;
            break;
        
  4. DataFile.OpenReadData() と DataFile.OpenWriteData() ではコモンダイアログを使用しています。
    commdlg.h は my.h(または datafile.h)の中で取り込んでいます。
    GetOpenFileName(&ofn);
    GetSaveFileName(&ofn);
    C# でも簡単な Text Editor の基礎 を掲載しています。

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

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