プロが教えるわが家の防犯対策術!

環境はVC++2008 MFCです。

現在ダイアログにスタティックテキストの色を変更しようと
下記HPを参考にしていますが、
「OnCtlColor関数のオーバーライド
ClassWizardを使って、OnCtlColor関数をオーバーライドさせる。 」
の方法がわかりません。
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_E …

クラスビュー>
ダイアログクラス選択>
プロパティ>
メッセージ
を表示してみても何も表示されていませんし。

どのようにどのようにオーバーライドするのでしょうか?

また、オーバーライドの方法をクラスウィザードを使用せず
後学の為、そのままコーディングレベルでご教授頂いたとしても
とてもありがたいと思います。

宜しくお願いします。

A 回答 (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;
}
といった具合でしょう
# 字下げに全角スペースを使用しています
# エラーなどが出る場合は置換してください
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A