複数のスタティックテキストの文字色を個々に別々の色に変更するには? – プログラミング – Home

複数のスタティックテキストの文字色を個...
 
通知
すべてクリア

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


禿げた天使
 禿げた天使
(@禿げた天使)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

こんにちは。
質問させて頂きます。

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

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


引用未解決
トピックタグ
ngs
 ngs
(@ngs)
ゲスト
結合: 17年前
投稿: 5
 

OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

if ( pWnd == pCtrl_1)
{
}

if ( pWnd == pCtrl_2)
{
}

とします。


返信引用
麩
 麩
(@麩)
ゲスト
結合: 17年前
投稿: 95
 

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;
}
}
では無いでしょうか?


返信引用
禿げた天使
 禿げた天使
(@禿げた天使)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

返事が遅れてすみません。

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
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

私の環境ではうまくいきますけど。
原因究明のためにも、最低限のコードでも出来ないのか確認してみてください。

一応私が試したやり方。(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;
}


ビルドし、実行


返信引用
禿げた天使
 禿げた天使
(@禿げた天使)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

また、返事が遅れて申し訳ありません。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました