- ベストアンサー
VC++2008 MFCでエディットコントロールの色を変更する方法
- VC++2008 MFC環境でダイアログに表示されるエディットコントロールの色を変更する方法について説明します。
- OnCtlColor関数をオーバーライドすることで、エディットコントロールの色を変更することができます。ClassWizardを使用してOnCtlColor関数をオーバーライドする方法を紹介します。
- クラスウィザードを使用せずにオーバーライドする場合は、コーディングレベルで指定することも可能です。具体的なコーディング方法についても解説します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
お示しのURLの内容は VC6.0以前を対象に書かれていると思われます VC2002以降ではClassWizardは廃止されております 代わりに プロパティウィンドウを使うようになっています ダイアログエディタで親ウィンドウ(Formやダイアログ)を選択しておいて プロパティウィンドウの『メッセージ』アイコンをクリックします # 右から2番目のアイコン 下のリストの中から WM_CTLCOLORを探します この右側のコンボボックスを開いて <追加> OnCtlColor をクリックします これで イベントハンドラのスケルトンを IDEが書いてくれます 変数の追加には クラスビューを使うか ヘッダーファイルを直接操作するかの方法になるでしょう クラスビューの場合 変数を作成するクラスを選択して 右クリック 追加 > 変数の追加 で表示されるダイアログに 必要事項を入力して OK といった具合です コードレベルでやる場合 メッセージマップを自分で書き、イベントハンドラを定義することになります メッセージマップは Cpp(コード実装ファイル)に BEGIN_MESSAGE_MAP(CSampleEdit01Dlg, CDialog) ON_WM_PAINT() END_MESSAGE_MAP() といった記述があるはずです この BEGIN_MESSAGE_MAPとEND_MESSAGE_MAPの間にマクロを記述します 今回の場合なら BEGIN_MESSAGE_MAP(CSampleEdit01Dlg, CDialog) ON_WM_PAINT() ON_WM_CTLCOLOR() END_MESSAGE_MAP() となります 次に イベントハンドラの定義をします ヘッダーファイルに afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); として ハンドラ関数の定義を記述 CPPファイルに HBRUSH CSampleEdit01Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO : ここで DC の属性を変更してください。 // この部分は追加 if ( nCtlColor == CTLCOLOR_EDIT ) { pDC->SetBkColor( m_clrEdit ); return (HBRUSH)m_brudhEdit.GetSafeHandle(); } // ここまで // TODO : 既定値を使用したくない場合は別のブラシを返します。 return hbr; } といった具合でしょう # 字下げに全角スペースを使用しています # エラーなどが出る場合は置換してください