グループボックスの文字、文字背景、枠の色変更方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Ciel
記事: 252
登録日時: 9年前

グループボックスの文字、文字背景、枠の色変更方法

#1

投稿記事 by Ciel » 9年前

お世話になります。

WINAPIを使用して、ツールを作っているのですが、
グループボックスの文字色と、文字の背景と、枠の色は変更可能でしょうか?
ググってみたのですが、方法がわかりませんでした。

ここでいう文字とは、グループボックス内で囲まれた文字のことではなく、左上に書かれる文字のことです。
この文字の色と、この文字の背景色を変えたいのです。

サブクラス化でも何でもいいので、方法をご存知の方、ご回答よろしくお願い致します。
oui C'est la Vie♪

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: グループボックスの文字、文字背景、枠の色変更方法

#2

投稿記事 by ISLe » 9年前

WM_CTLCOLORSTATICメッセージハンドラを記述することで文字色と文字の背景ブラシを指定することができます。
枠の色はシステムカラーが使われるので変更できません。

枠の色を変えたい場合は、グループボックスを使わずに自前で描画しましょう。

アバター
Ciel
記事: 252
登録日時: 9年前

Re: グループボックスの文字、文字背景、枠の色変更方法

#3

投稿記事 by Ciel » 9年前

ISLeさんありがとございます!

WM_CTLCOLORSTATICだったんですね。。
WM_CTLCOLORBTNかと思ってました。クラス名はBUTTONで作ってたので。。

コード:

switch(msg){
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;
		
		case WM_CTLCOLORSTATIC:
			if(group_hwnd==(HWND)lp){
				SetBkMode((HDC)wp,TRANSPARENT);
				SetTextColor((HDC)wp,RGB(102,68,2));
				return (LRESULT)GetStockObject(BLACK_BRUSH);
			}
			break;
	}
こんな感じで、文字茶色、背景黒でテキスト部分を描画できました。
枠は自分で書くのめんどくさいので諦めますw

ISLeさん、ありがとうございました!
oui C'est la Vie♪

アバター
Ciel
記事: 252
登録日時: 9年前

Re: グループボックスの文字、文字背景、枠の色変更方法

#4

投稿記事 by Ciel » 9年前

解決忘れました。すいません><
oui C'est la Vie♪

アバター
Ciel
記事: 252
登録日時: 9年前

Re: グループボックスの文字、文字背景、枠の色変更方法

#5

投稿記事 by Ciel » 9年前

ちょっと問題が発生したので、解決したのに申し訳ありませんがあげさせていただきます。

私が貼ってあるコードのとおりに書けば、問題なく文字と背景が描画されていたんですが、
ボタンなどをXPスタイルに変更した途端、文字の色が変更できなくなってしまいました。
背景色の変更はできます。

XPスタイルの設定について参考にしたページは以下のURLです。
http://www.g-ishihara.com/vc_wi_01.htm

XPスタイルを適用した場合、グループボックスの文字色変更は不可能なのでしょうか?

分かる方、ご回答よろしくお願い致します。
oui C'est la Vie♪

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: グループボックスの文字、文字背景、枠の色変更方法

#6

投稿記事 by ISLe » 9年前

Ciel さんが書きました:XPスタイルを適用した場合、グループボックスの文字色変更は不可能なのでしょうか?
コントロール個別にビジュアルスタイルを無効にすることができるようです。
http://msdn.microsoft.com/ja-jp/library/ms997646.aspx

無効にすると枠もショボくなっちゃいますね。
自前でビジュアルスタイルで描画するとして、UxTheme APIで枠だけうまく描画できるのかは分からないのですけども。

個人的には色の組み合わせによって見づらくなる可能性があるのでテーマにまかせるほうが良い気がします。
テーマ使ってなくてもそうなんですけど。

アバター
Ciel
記事: 252
登録日時: 9年前

Re: グループボックスの文字、文字背景、枠の色変更方法

#7

投稿記事 by Ciel » 9年前

おおお!ISLeさんありがとうございます!

できました!まさか個別に無効に出来る方法があったとは・・・!
枠は別にこれぐらいのショボさならOKです。
本当に助かりました^^

同じような状況になってしまった人のために、方法を書いておきます。

Uxtheme.hをインクルード、uxtheme.libをリンクさせ、
無効にしたいコントロールに対して、SetWindowThemeを実行するだけです。

第二、第三引数を↓のように、空白文字列に設定すれば、そのコントロールに関しては
ビジュアルスタイルが無効になります。
NULLじゃダメだったので、空白文字を設定して下さい。
たぶんLPCWSTR型しか設定できないようなので、L文字を先頭に付加してユニコード文字セットに
しないといけないんだと思います(たぶん)。

SetWindowTheme(group_hwnd,L" ",L" ");

ISLeさん、ありがとうございました^^
oui C'est la Vie♪

閉鎖

“C言語何でも質問掲示板” へ戻る