mfc-ml

2001年09月

30

[mfc 35153] Re: OnCtlColor と同等の自作関数

ryojiです。

On Sun, 30 Sep 2001 16:29:37 +0900
Subject: [mfc 35151] Re: OnCtlColor と同等の自作関数
Subject: [mfc 35151] Re: OnCtlColor と同等の自作関数
berry <c...@anet.ne.jp> wrote:

> 今回のは、コントロールの色を変更したいのですが、
> OnCtlColorが使えないということで悩んでいたのです。

ああ、最初に書いてありましたね。勘違いしてました A^^;

ちょっと「使えない」の意味がよくわかりません。
まず基本的なところで、
ダイアログの OnCtlColor() の第3引数 nCtlColor には
対象となるコントロールの種類が入ってくることや、
コントロール上に描画されるテキストの背景色は、コントロール
の背景色とは別のものだ、ということは、わかってますか?

例)

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

  static CBrush br[] = 
  {
    RGB(255, 0, 0),
    RGB(0, 255, 0),
    RGB(0, 0, 255),
    RGB(255, 255, 0),
    RGB(255, 0, 255),
    RGB(0, 255, 255),
    RGB(255, 128, 128),
    RGB(128, 255, 128),
    RGB(128, 128, 255)
  };

  switch (nCtlColor)
  {
  case CTLCOLOR_BTN: hbr = br[0]; break;
  case CTLCOLOR_DLG: hbr = br[1]; break;
  case CTLCOLOR_EDIT: hbr = br[2]; break;
  case CTLCOLOR_LISTBOX: hbr = br[3]; break;
  case CTLCOLOR_MSGBOX: hbr = br[4]; break;
  case CTLCOLOR_SCROLLBAR: hbr = br[5]; break;
  case CTLCOLOR_STATIC: hbr = br[6]; break;
  default: hbr = br[7]; break;
  }

  LOGBRUSH lb;
  br[8].GetLogBrush(&lb);
  pDC->SetBkColor(lb.lbColor);

  return hbr;
}
30

[mfc 35153] Re: OnCtlColor と同等の自作関数

ryojiです。

On Sun, 30 Sep 2001 16:29:37 +0900
Subject: [mfc 35151] Re: OnCtlColor と同等の自作関数
Subject: [mfc 35151] Re: OnCtlColor と同等の自作関数
berry <c...@anet.ne.jp> wrote:

> 今回のは、コントロールの色を変更したいのですが、
> OnCtlColorが使えないということで悩んでいたのです。

ああ、最初に書いてありましたね。勘違いしてました A^^;

ちょっと「使えない」の意味がよくわかりません。
まず基本的なところで、
ダイアログの OnCtlColor() の第3引数 nCtlColor には
対象となるコントロールの種類が入ってくることや、
コントロール上に描画されるテキストの背景色は、コントロール
の背景色とは別のものだ、ということは、わかってますか?

例)

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

  static CBrush br[] = 
  {
    RGB(255, 0, 0),
    RGB(0, 255, 0),
    RGB(0, 0, 255),
    RGB(255, 255, 0),
    RGB(255, 0, 255),
    RGB(0, 255, 255),
    RGB(255, 128, 128),
    RGB(128, 255, 128),
    RGB(128, 128, 255)
  };

  switch (nCtlColor)
  {
  case CTLCOLOR_BTN: hbr = br[0]; break;
  case CTLCOLOR_DLG: hbr = br[1]; break;
  case CTLCOLOR_EDIT: hbr = br[2]; break;
  case CTLCOLOR_LISTBOX: hbr = br[3]; break;
  case CTLCOLOR_MSGBOX: hbr = br[4]; break;
  case CTLCOLOR_SCROLLBAR: hbr = br[5]; break;
  case CTLCOLOR_STATIC: hbr = br[6]; break;
  default: hbr = br[7]; break;
  }

  LOGBRUSH lb;
  br[8].GetLogBrush(&lb);
  pDC->SetBkColor(lb.lbColor);

  return hbr;
}
30

[mfc 35152] Re: OnCtlColor と同等の自作関数

追加です。
コントロールの色なのですが、

エディットボックス
グループボックス
コンボボックス
スタティックテキスト
リストビュー
リストボックス

コントロールの背景色です。
過去ログ等を見てもいっしょの関数でやるのは
難しいように思うのですが・・・
30

[mfc 35152] Re: OnCtlColor と同等の自作関数

追加です。
コントロールの色なのですが、

エディットボックス
グループボックス
コンボボックス
スタティックテキスト
リストビュー
リストボックス

コントロールの背景色です。
過去ログ等を見てもいっしょの関数でやるのは
難しいように思うのですが・・・
30

[mfc 35151] Re: OnCtlColor と同等の自作関数

ryoji さん、さあもとさん
こんにちわ

> 初心者には難儀な...(ーー;)
> ちゃんと技術的なことを理解してる人が仕様決めしているのかな?
> 技術指導してくれる人もいない?
> 前の話([mfc 34970])で行き詰まってしまうのでは、きつそうですねぇ。
そうなんですよね・・・
実際きついです(; ̄Д ̄)

> > ところで、OnCtlColorを親ウィンドウ(ダイアログ)で行うのでは
> > なく、子ウィンドウ自身に行わせるのは駄目ですかね?

> ダイアログ自体の色(CTLCOLOR_DLG)を変えたいみたいですが...
> 違いますか?。> berry さん。
ダイアログ自身の色は前回質問した際に解決しました。
(そのせつはありがとうございました)
今回のは、コントロールの色を変更したいのですが、
OnCtlColorが使えないということで悩んでいたのです。
[No35145]で教えていただいた方法はまだやっていませんので
今からやってみます。
また報告しますのでよろしくおねがいします。
記事検索
Amazon.co.jp
  • ライブドアブログ