複数のスタティックテキストの文字色を個々に別々の色に変更するには?

[戻る]
禿げた天使 2007/07/13(金) 17:08:53
こんにちは。
質問させて頂きます。

現在、WinXP上でVC++6.0を使用して、ダイアログベースの
ソフトを作成しております。
ダイアログには、8個のスタティックテキストを配置しておりまして
その個々で表示する文字色を、別々の色で表示したいのです。
OnCtlColor()で、SetTextColor()を呼ぶ事で文字色が変更されるのは
確認しておりますが、1つ目のスタティックテキストの文字色を赤に
変更後、2つ目のスタティックテキストの文字色を青に変更すると
1つ目のスタティックテキストの文字色も青になってしまいます。

各々別の文字色にする事は出来ないでしょうか。
何卒、ご教授ください。
宜しくお願い致します。

ngs 2007/07/14(土) 14:38:18
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

if ( pWnd == pCtrl_1)
{
}


if ( pWnd == pCtrl_2)
{
}

とします。

2007/07/15(日) 16:15:26
MSDN
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT 
nCtlColor );
  pWnd
    カラーを調べるコントロールへのポインタを持ちます。一時的なポインタでもか
まいません。


なので、

OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){
  switch(pWnd->GetDlgCtrlID()){
   case Ctrl_1:
     break;
   case Ctrl_2:
     break;
   default:
     break;
  }
}
では無いでしょうか?

禿げた天使 2007/07/17(火) 14:42:34
返事が遅れてすみません。

ngsさん、麩さん、ご返答ありがとうございます。

お二方とも同じように各スタティックテキストを
判別するように記載してくださいましたが、
その処理は試しました。

麩さんの記載をお借りして説明致しますと、
  switch(pWnd->GetDlgCtrlID()){
   case Ctrl_1:
     pDC->SetTextColor(RGB(0 , 0 , 255));
     break;
   case Ctrl_2:
     pDC->SetTextColor(RGB(255 , 0 , 0));
     break;
   default:
     break;
  }
と処理すると、最初に、Ctrl_1の時にはちゃんと青で
文字が表示されるのですが、次にCtrl_2の文字色を
変更しようとすると、Ctrl_1も、Ctrl_2も共に
赤になってしまうと言う現象です。

私も上記の処理でいけると思っておりましたが
うまくいきません。

色々調べてはいるのですが、難しいのかもしれません。
もし、ご存知であれば、再度、ご教授をお願い致します。
宜しくお願い致します。

Blue 2007/07/17(火) 15:39:41
私の環境ではうまくいきますけど。
原因究明のためにも、最低限のコードでも出来ないのか確認してみてください。

一応私が試したやり方。(Windows XP Pro SP2/VC++6.0 Enter SP6)

新規プロジェクトでMFC Application - ダイアログ
↓
ダイアログ上のコントロールをすべて削除して、
Staticコントロールを3つ配置
↓
それぞれコントロールIDをIDC_STATC1,IDC_STATC2,IDC_STATIC3とする
↓
WM_CTLCOLORのメッセージハンドラを追加
↓
下記のコードを記述

HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO: この位置で DC のアトリビュートを変更してください
    switch (pWnd->GetDlgCtrlID())
    {
    case IDC_STATIC1:
        pDC->SetTextColor(RGB(255, 0, 0));
        break;
    case IDC_STATIC2:
        pDC->SetTextColor(RGB(0, 255, 0));
        break;
    case IDC_STATIC3:
        pDC->SetTextColor(RGB(0, 0, 255));
        break;
    }
    
    // TODO: デフォルトのブラシが望みのものでない場合には、違うブラシを返してく
ださい
    return hbr;
}

↓
ビルドし、実行

禿げた天使 2007/07/19(木) 10:40:28
[[解決]]
また、返事が遅れて申し訳ありません。

Blueさん、ご返答ありがとうございます。
Blueさんのおっしゃるとおり、新規に作成して
動作させましたところ、問題なく変更されました。
と言う事は、現在私が作成している方のソフトに
何か別の要因が影響しているのかもしれません
ので、そちらを調べるしかないですね。

みなさま、お手数をおかけいたしました。
ありがとうございました。

古いスレッドには追加発言できません。