前回はボタンが押された際のイベントハンドラーを実装しました。
今回はボタンと同じく利用機会の多いEdit Controlについて実装してみましょう。
ダイアログエディターからEdit Controlを追加するとエディットボックスが作成できます。
何かの値やメッセージの表示などによく利用される読み取り専用(Read Only)と書き込み可能なエディットボックスを2つ用意して、入力された値を表示するようなサンプルプログラムを作ります。
Contents
エディットボックスに入力できるサンプルを作ろう
プロジェクトの作成方法:無料のVisual StudioをインストールしてMFCを動かそう
エディットボックスを作ろう
まずは、プロジェクトを作成しツールボックスを表示させる必要があります。
- メニューバーより、[表示] – [ツールボックス]をクリックすると左側ペインにツールボックスが表示されます。
出たり消えたりするのも困るので、ツールボックスタイトル部のピンをクリックし、固定しておきます。
- ダイアログエディターから、Edit Controlをクリックし、ダイアログボックスに追加します。
もう一度Edit Controlをクリックし読み取り専用のものを追加しておきます。 - 1つを読み取り専用にするため、任意のエディットボックスをクリックし、プロパティからRead OnlyをTrueに変更します。
これでダイアログボックス内に2つのエディットボックス(1つは読み取り専用)が作成できました。
入力された値を保持する変数を宣言しよう。
次にエディットボックスに表示される文字列、CString型の変数を宣言します。
- 書き込み可能なエディットボックスを右クリックし、[変数の追加]をクリックします。
- メンバー変数の追加ウィザードが表示され、追加する変数の設定を行います。
アクセスはprivate、カテゴリはvalue、変数名は任意に設定してください。
- [完了]ボタンをクリックすると、Dlg.hにCString型の変数が宣言されます。
- 同じように、読み取り専用のエディットボックスにも変数を追加しておきましょう。
トリガーとなるボタンを配置しよう。
最後に、画面を更新するボタンを、前回の記事を参考に作成しておきましょう!
関連リンク:【MFC入門】MFCについて知ろう【Visual C++】
コーディングしよう。
外観や変数の宣言が終われば、動作の決めるためにソースコードを編集しましょう。
まずは、ボタンが押されたら画面が更新されるようにします。
前回同様にボタンのイベントハンドラーを以下のように記述します。
1 2 3 4 5 |
void Cpignote_001Dlg::OnBnClickedOk() { UpdateData(); AfxMessageBox(writableEdit); } |
writableEditは先ほど追加したCString型の変数名を指定してください。
読み取り専用のエディットボックスには初期値を設定しましょう。
プロジェクトを作成するとOnInitDialog()が宣言されていますので、以下のように初期値の設定を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
BOOL Cpignote_001Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); ... // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、 // Framework は、この設定を自動的に行います。 SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定 SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定 // TODO: 初期化をここに追加します。 readOnlyEdit = _T("初期値") UpdateData(FALSE); return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。 } |
13行目と14行目が追加したコードです。
readOnlyEditには読み取り専用のエディットボックスに追加したCString型変数を指定します。
これで読み取り専用のエディットボックスには指定した、「初期値」という値が表示されます。
書き込み可能なエディットボックスに何か文字を入力し、[OK]ボタンを押下するとメッセージボックスが表示され、入力した文字列が表示されるはずです。
簡単でしたね!
まとめ
何か文字の入力を促したり、実行結果を表示したりする際に、エディットボックスは活用されます。
基本としては「エディットボックスに変数を追加し、ボタンなどで実行させる」という形になるでしょうか。
ぜひ一度プログラミングを行って結果を確認してみてくださいね。