エディットボックス -- 複数行

新規にダイアログベースのプロジェクトを作成する。 プロジェクト名は edit2 としよう。

初期状態のコントロールをすべて削除して、次のようにエディットボックスと ボタンを配置する。

ここではエディットボックスに複数行の文字列を出力することを考える

改行コード

テキストボックスに複数行の文字を出力することは 1行の文字出力と基本的には同じことですが、若干の注意が必要です。

最初にエディットボックスの「プロパティー」を次のようにします。

項目 意味
MultiLine True 複数行
Want Return True 改行したい(改行を許可)
Auto HScroll False水平自動スクロールせず
Vertical ScrollTrue 垂直スクロールバー

更にエディット ボックスに変数を次の条件で追加します。

カテゴリ変数の種類変数名
value CString m_Text

最後にボタンにイベント ハンドラーを追加して、 OnBnClickedButton1 関数には次のように書き込みをします。

void CCedit2Dlg::OnButton1() 
{
    // TODO: この位置にコントロール通知ハンドラ...
    CString str;

    str = "項目1\r\n項目2\r\n項目3";
    m_Text = str;
    UpdateData(FALSE);
    
    AfxMessageBox(str);
}

ビルドして、実行しよう。ボタンを押せば、 複数行の文字がエディットボックスに出力され、 同時に同じ文字がメッセージボックスに出力される。

注意する点
改行コードは OS に依存し、C 言語の表示では
OS 改行コード 書式文字
UNIX LF \n
Windows CR + LF \r\n
となっている。(LF = line feed, 行送り、CR = carriage return)

Windows の C 言語プログラムの printf 文 などでは改行のための書式文字として、本来は \r\n を使用しないといけないが、 \n を使用しても差し支えないように作ってある。 しかし、エディットボックスの内部では \r\n を使用しないとうまく改行しない。 (エディットボックスに Windows のテキストファイルを表示することを考えている ためのようである。)

しかし AfxMessageBox では \n でもちゃんと改行する。 上のプログラムで \r\n を \n にするとどうなるか実験をしてみよう。