エディットコントロール内の色を変更する

エディットコントロール内の色を変更するには、コントロールの親ウィンドウ (フォームビューやダイアログ)クラスで色を指定する方法と、 コントロールが属するコントロールクラスで色を指定する方法がある。


方法1:親ウィンドウのOnCtlColor関数内で処理する。
コントロールを描画する際、フレームワークはその親ウィンドウに対してOnCtlColor関数を呼び出す。 以下に示した方法では、ウィンドウ内の全てのエディットコントロール内の色が変更される。
色とブラシの準備
まず色とブラシを準備する。親ウィンドウクラスのメンバ関数にCBrush型、 COLORREF型の変数を用意し、コンストラクタでこれを初期化する。
// ヘッダファイルでの記述 --------------------
private:
	CBrush m_brushEdit;
	COLORREF m_clrEdit;

// コンストラクタへの記述 --------------------
	m_clrEdit = RGB(200,255,255);
	m_brushEdit.CreateSolidBrush(m_clrEdit);
OnCtlColor関数のオーバーライド
ClassWizardを使って、OnCtlColor関数をオーバーライドさせる。
// OnCtlColor関数の実装 --------------------
HBRUSH CCColorControlView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: この位置で DC のアトリビュートを変更してください
	if( nCtlColor == CTLCOLOR_EDIT ) {
		pDC->SetBkColor(m_clrEdit);
		return (HBRUSH)(m_brushEdit.GetSafeHandle());
	}

	// TODO: デフォルトのブラシが望みのものでない場合には、違うブラシを返してください
	return hbr;
}

方法2:エディットコントロールクラスのCtlColor関数内で処理する。
MFCのメッセージ返送機能を利用することで、直接コントロールクラスに描画処理を記述することができる。
ClassWizardでの処理
ClassWizardを使って、ON_WM_CTLCOLOR_REFRECTメッセージのハンドラCtlColorを作成する。 メッセージとして、「=WM_CTLCOLOR」(「=」があることに注意)を選択すればよい。

実際の描画処理
方法1と同様である。色とブラシをクラスのメンバとして用意し、コンストラクタで初期化し、 CtlColor関数の中で色やブラシを設定すればよい。

目次へ