スタテックウインドウ全体の色の設定

[戻る]
初心者@rumu 2002/06/26(水) 18:51:14
 CreateWindowEx(第2引数を"STATIC"に)でスタテックウインドウを作成したのですが、
そのスタテックウインドウ全体の色を好みの色に変更(システム側からではなく)する
仕方がわかりません。よろしくお願いします。

環境→VC++.NET
      SDK

不良PG [E-Mail] 2002/06/26(水) 19:00:52
スタティックウインドウをサブクラスしてWM_CTLCOLORを処理するか
スタティックウインドウの親ウインドウでWM_CTLCOLORSTATICを処理すればよいのでは・・

初心者@rumu 2002/06/27(木) 07:40:46
 不良PGさん、ありがとうございます。
 一応、親ウインドウのプロシージャで、

 case WM_CTLCOLORSTATIC:
      if (HIWORD(lp) == CTLCOLOR_STATIC)
          return (LRESULT)(GetStockObject(LTGRAY_BRUSH));
         
 という処理をしてみたのですが、ダメでした。WM_CTLCOLORSTATIC 以下に書くコード
はどういった感じになるのでしょうか。よろしくお願いします。

sugar 2002/06/27(木) 09:30:32
lpってWM_CTLCOLORSTATICのLPARAMですか?
これ、スタティックコントロールのハンドルですよ。
HIWORD(lp)がCTLCOLOR_STATICと等価にはなり得ないのでは。

初心者@rumu 2002/06/27(木) 10:16:20
[[解決]]
 sugarさん、ありがとうございました。

 MSDNライブラリで調べて、

  case WM_CTLCOLORSTATIC:
      if ((HWND) lp == hShiWnd)
          return (LRESULT)CreateSolidBrush(RGB(r,g,b)) ;
 
 としたところ、うまく好みの色に変更することができました。無事に解決しました。

YuO [E-Mail] 2002/06/27(木) 11:42:55
> return (LRESULT)CreateSolidBrush(RGB(r,g,b)) ;

これはよくある「やってはいけない例」です。
ここで作られたブラシは削除されないので,リソースリークを引き起こします。


WM_CREATEとか,それより前で作成し,
WM_DESTROYとか,それより後で削除するようにする必要があります。

初心者@rumu 2002/06/27(木) 18:52:21
 YuOさん、ありがとうございます。


 > WM_CREATEとか,それより前で作成し,
 > WM_DESTROYとか,それより後で削除するようにする必要があります。


 うーん、具体的にはどのような感じで・・・。ちょっとやり方がよくわからないで
す。よろしくお願いします。

YuO [E-Mail] 2002/06/27(木) 19:55:04
http://www.expertmg.co.jp/html/cti/vctips/http://www.expertmg.co.jp/html/cti/vctips/control.htm
を参照してみてください。そのまんまが載っています。

初心者@rumu 2002/06/28(金) 08:05:45
[[解決]]
 YuOさん、どうもありがとうございました。

  http://www.expertmg.co.jp/html/cti/vctips/control.htm
 
 を参考にして適宜修正しました。

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