CreateWindowEx(第2引数をSTATICに)でスタテックウインドウを作成したのですが、
そのスタテックウインドウ全体の色を好みの色に変更(システム側からではなく)する
仕方がわかりません。よろしくお願いします。
環境→VC++.NET
SDK
スタティックウインドウをサブクラスしてWM_CTLCOLORを処理するか
スタティックウインドウの親ウインドウでWM_CTLCOLORSTATICを処理すればよいのでは・・
不良PGさん、ありがとうございます。
一応、親ウインドウのプロシージャで、
case WM_CTLCOLORSTATIC:
if (HIWORD(lp) == CTLCOLOR_STATIC)
return (LRESULT)(GetStockObject(LTGRAY_BRUSH));
という処理をしてみたのですが、ダメでした。WM_CTLCOLORSTATIC 以下に書くコード
はどういった感じになるのでしょうか。よろしくお願いします。
lpってWM_CTLCOLORSTATICのLPARAMですか?
これ、スタティックコントロールのハンドルですよ。
HIWORD(lp)がCTLCOLOR_STATICと等価にはなり得ないのでは。
sugarさん、ありがとうございました。
MSDNライブラリで調べて、
case WM_CTLCOLORSTATIC:
if ((HWND) lp == hShiWnd)
return (LRESULT)CreateSolidBrush(RGB(r,g,b)) ;
としたところ、うまく好みの色に変更することができました。無事に解決しました。
> return (LRESULT)CreateSolidBrush(RGB(r,g,b)) ;
これはよくある「やってはいけない例」です。
ここで作られたブラシは削除されないので,リソースリークを引き起こします。
WM_CREATEとか,それより前で作成し,
WM_DESTROYとか,それより後で削除するようにする必要があります。
YuOさん、ありがとうございます。
> WM_CREATEとか,それより前で作成し,
> WM_DESTROYとか,それより後で削除するようにする必要があります。
うーん、具体的にはどのような感じで・・・。ちょっとやり方がよくわからないで
す。よろしくお願いします。
http://www.expertmg.co.jp/html/cti/vctips/
の
http://www.expertmg.co.jp/html/cti/vctips/control.htm
を参照してみてください。そのまんまが載っています。