スタティックテキストの背景色 – プログラミング – Home

スタティックテキストの背景色
 
通知
すべてクリア

スタティックテキストの背景色


AA
 AA
(@AA)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

こんにちは。
初心者です。宜しくお願い致します。

ボタン1を押したら、スタティックテキスト1の背景色を変更、
ボタン2を押したら、スタティックテキスト2の背景色を変更
としたいのです。

一旦、どちらかのスタティックテキストの背景色を変更した後に、
他のアプリケーションが立ち上がり、ウインドウが隠れてしまったら
その後の再描画(?)で、すべてのスタティックテキストに色がついてしまいます。

どのように修正したらいいのでしょうか?

void CColorDlg::OnButton1()
{
m_color = RGB(255,255,0);
m_st_1.RedrawWindow();
}

void CColorDlg::OnButton2()
{
m_color = RGB(255,255,0);
m_st_2.RedrawWindow();
}

HBRUSH CColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC ){
pDC->SetBkMode(TRANSPARENT);
return :: CreateSolidBrush(m_color);
}
return hbr;
}

VC++6.0, MFC, Win2000を使用しています。

どなたか、ご指導頂けませんか?


引用解決済
トピックタグ
YOU
 YOU
(@YOU)
ゲスト
結合: 23年前
投稿: 41
 

ボタンをクリックしたときの処理でフラグをセットしておいて

OnCtrlColorの中でそのフラグと
pWnd->GetDlgCtrlID()
で取得できるIDで判断するといいと思います。

スタティックテキストのIDをIDC_STATICから変更するのも忘れずに。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

背景色を保持する変数を二つ用意してください。

ところで、
> return :: CreateSolidBrush(m_color);
このように作りっぱなしのブラシを返すと、リソースリークします。

参考:
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200206/02060102.txt


返信引用
AA
 AA
(@AA)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

連絡が遅くなり、申し訳ありませんでした。
YOUさん、dairygoodsさん、ご助言ありがとうございます。
おかげで、うまく背景色を変更することができました。

しかし、dairygoodsさんからご指摘いただきました
リソースリークの件が解決できたのか、
自分でよくわかりません。

最後の行の return hbr の前に
DeleteObject( hbr );
を入れてみました。
問題なく実行はできたのですが、
これで解決できているのでしょうか?
かなりの初心者なもので、確認の仕方がわかりませんでした・・・。

宜しくお願い致します。


返信引用
あいる
 あいる
(@あいる)
ゲスト
結合: 20年前
投稿: 55
 

> 最後の行の return hbr の前に
> DeleteObject( hbr );
> を入れてみました。

これだと、return で返されるhbrが不定なっちゃう??
私なら・・・
1、メンバーに HBRUSH の m_hColorBrush を用意する。
2、コンストラクタなりで、デフォルトの m_hColorBrush を作成、
もしくはNULLにする
3、m_color の値が変わるタイミングで、m_hColorBrush を作成、
もしくは再作成する
再作成時は DeleteObject してから作成する
4、OnCtlColor で条件にマッチしたとき m_hColorBrush を返す
m_hColorBrush がNULLのときは、OnCtlColorに任せる
5、デストラクタなりで m_hColorBrush が作成されていたら DeleteObject する

でしょうかねぇ~
# 人それぞれやりかたがあると思いますが・・・


返信引用
あいる
 あいる
(@あいる)
ゲスト
結合: 20年前
投稿: 55
 

と、書いた後にスレを読み返すと・・・
dairygoods さんが書かれたレスの参考先でちゃんと説明されていますねぇ・・・

# きつい言い方かもですが、その参考先を見る限りは
# return 文の前で DeleteObject にはならないかと・・・


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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