スタテックウインドウ全体の色の設定 – プログラミング – Home

スタテックウインドウ全体の色の設定
 
通知
すべてクリア

[解決済] スタテックウインドウ全体の色の設定


初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

 CreateWindowEx(第2引数をSTATICに)でスタテックウインドウを作成したのですが、
そのスタテックウインドウ全体の色を好みの色に変更(システム側からではなく)する
仕方がわかりません。よろしくお願いします。

環境→VC++.NET
SDK


引用未解決
トピックタグ
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

スタティックウインドウをサブクラスしてWM_CTLCOLORを処理するか
スタティックウインドウの親ウインドウでWM_CTLCOLORSTATICを処理すればよいのでは・・


返信引用
初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

 不良PGさん、ありがとうございます。
 一応、親ウインドウのプロシージャで、

 case WM_CTLCOLORSTATIC:
if (HIWORD(lp) == CTLCOLOR_STATIC)
return (LRESULT)(GetStockObject(LTGRAY_BRUSH));

 という処理をしてみたのですが、ダメでした。WM_CTLCOLORSTATIC 以下に書くコード
はどういった感じになるのでしょうか。よろしくお願いします。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

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


返信引用
初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

sugarさん、ありがとうございました。

 MSDNライブラリで調べて、

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


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

> return (LRESULT)CreateSolidBrush(RGB(r,g,b)) ;

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

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


返信引用
初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

YuOさん、ありがとうございます。

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

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


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

http://www.expertmg.co.jp/html/cti/vctips/

http://www.expertmg.co.jp/html/cti/vctips/control.htm
を参照してみてください。そのまんまが載っています。


返信引用
初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

YuOさん、どうもありがとうございました。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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