[MFC]エディットボックス(CEdit)の使い方

MFCでエディットボックスを使うにはCEditを使います。

この記事では、CEditの基本的な使い方を解説します。

準備

エディットボックスを使うためには、まずリソースにエディットボックスを貼り付けてメンバ変数化します。

リソースエディタで追加したエディットボックスに対して、クラスウィザードまたは右クリックメニューからダイアログクラスのメンバ変数に登録します。

ここでは変数名を「m_Edit」としたので、以降ではm_Editに対して色々操作を行なっていきます。

位置・サイズの取得、設定

エディットボックスに限らず、MFCの扱うウィンドウ・コントロール共通で、位置・サイズの取得を行う場合にはGetClientRect関数を、設定を行う場合にはMoveWindow関数を使用します。

MFC
// 矩形
CRect rc;
// 矩形取得
this->m_Edit.GetClientRect(rc);
MFC
// (10, 10)の位置に(200, 20)のサイズで移動・リサイズ
this->m_Edit.MoveWindow(10, 10, 200, 20);

コントロールの場合、取得する場合も設定する場合もクライアント座標であることに注意してください。(貼り付けられたダイアログの左上の位置からの相対座標)

テキストの取得、設定

エディットボックスに対してテキストの取得を行う場合にはGetWindowText関数を、設定を行う場合にはSetWindowText関数を使用します。

MFC
// テキスト変数
CString text;
// エディットボックスからテキスト取得
this->m_Edit.GetWindowText(text);
MFC
// テキスト変数
CString text = _T("HogeHoge");
// エディットボックスにテキスト設定
this->m_Edit.SetWindowText(text);

背景色・文字色を変更する

エディットボックスの背景色・文字色を変更する場合には、エディットボックスを貼り付けたダイアログクラスのOnCtlColor関数で以下のように記述します。

MFC
HBRUSH CHogeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    // 背景色を変更したいエディットボックスの場合
    if(pWnd == &this->m_Edit)
    {
        // 文字色を赤色に変更
        pDC->SetTextColor(RGB(255, 0, 0));
        // 文字背景色を透明に変更
        pDC->SetBkMode(TRANSPARENT);
        // 背景色を設定したブラシを返却
        return this->m_backBrush;
    }

    return hbr;
}

この時、m_backBrushはメンバ変数としてCBrush型の変数を用意しておく必要があります。

OnCtlColor関数が実施されるたびにCBrush型の変数を生成するとリソースリークが発生する可能性があるので注意してください。

ちなみに、OnCtlColor関数をダイアログクラスに追加するには、クラスウィザードからWM_CTLCOLORハンドラを追加するだけです。

エディットボックスの変更を検知する

エディットボックスの変更を検知するには、エディットボックスのEN_CHANGEハンドラを追加します。

エディットボックスのEN_CHANGEハンドラを追加するには、クラスビューからダイアログクラスを選択し、プロパティウィンドウのイベントから変更を検知したいエディットボックスのEN_CHANGEのプルダウンメニューでOnEnChangeEdit〜〜(IDを変更していなければOnEnChangeEdit1)を選択します。

エディットボックスで変更があればこの関数が呼ばれるので、検知した後の処理をこの関数に記述します。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です