★初めて質問します。
・Windows XP Home SP2
・VC++2003 Win32 SDK(SDI)
・今、ダイアログベースのアプリで電卓ソフトを作成中です。
質問内容はプッシュボタンの文字色のみの変更方法を探っています。
過去のログやネット検索により「オーナードロー」すれば背景色、文字色、画像など
いろいろと描画できるようですが、ボタンの見た目を Windows XP の Luna スタイルで
文字色のみの「色」を変更したいのです。つまり、Windows 電卓のボタンのように数字
や
記号などの「文字色」のみを変更したいのです。背景などはそのまま残したいです。
そこで「文字色のみの変更」方法を教えて欲しいのです。
お願いします。
こんちわ
そのオーナードローを使用し、文字色の部分だけを変更し
他のとこはそのまま使用すればいいんじゃないですか?
つばささん。
アドバイスありがとうございます。
下の URL を参考にしています。
この内容でどこの部分をカットすればよいのですか?
ボタン枠を描画しないと Windows が描画してくれるのですか?
もう少し具体的にお願いします。
http://ww1.enjoy.ne.jp/~turikiti/knowledge/program/backcolor.htm
> この内容でどこの部分をカットすればよいのですか?
OnDrawItem()で書かれているコードすべてです。
> ボタン枠を描画しないと Windows が描画してくれるのですか?
> もう少し具体的にお願いします。
オーナードローするということは、ボタンの枠、背景、文字、フォーカス、選択状態の
有無など、すべてを自分で描画しなければいけません。
Windowsは一切描画してくれません。
また、標準のボタンと同じスタイルが欲しければ、XP以降のテーマにも対応する必要が
あります。
Kさん。
ありがとうございます。
オーナードローではボタンの文字色のみを変更することは不可能という事ですね。
そうなるとボタンの文字色を変更するためには、オーナードローで背景色、枠など
すべてを描画する必要があるようですが、ボタンのXPテーマに対応するにはどのような
方法がありますか?あるいは、どうやってテーマと同じ長方形を描画すればよいのです
か?
ヒントでもよいのでお願いします。
WM_CTLCOLORBTN。
pppppさん。
ヒントをありがとうございます。
それでは「WM_CTLCOLORBTN」メッセージについて調べてみます。
もう少し情報が欲しいためこのままにします。
まだ何かあればお願いします。
追記。
過去のログから
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200008/00080032.txt
を見つけましたがなぜか色が変わりません。
別情報では「BS_PUSHBUTTON」スタイルまたは「BS_DEFPUSHBUTTON」スタイルは
戻り値に影響されないとなっています。
出来ないということでしょうか?
pppppさんへ。
マイクロソフトの公式ページに
>このメッセージの間、加えられた変更は、コマンド ボタンに影響を与えません。
>描画するために、コマンド ボタンがシステム カラーを常に使用します。
となっています。( http://support.microsoft.com/kb/130952/ja)
「WM_CTLCOLORBTN」以外で文字色だけ変更できる方法があればお願いします。
リンクなどの情報も待っています。
SDKはあきらめて、C#などで.NET使えば楽ですよ。
オーナードローで頑張るなら、テーマ関係のリファレンスはこっちです。
DrawThemeBackground, DrawThemeEdgeなどででXP以降のテーマのボタンを描画します。
XP以前のOSで動かしたい場合は、UxTheme.dllをLoadLibraryでロードする必要がありま
す。
・Visual Styles Reference
http://msdn2.microsoft.com/en-us/library/ms649782.aspx
・カスタムテーマボタンサンプル
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-
us/samples/internet/shellcc/visualstylescustomcontrol/default.asp
確かに背景色はダメと書いてますね。
でも文字の色だけ変更ですよね?
WM_CTLCOLORBTN、SetTextColor。
Kさん、pppppさん。
再度の情報をありがとうございます。
C#などの.NET環境を持っていないため現時点ではSDKで頑張ろうと思っています。
また、C#などで行えるのならばSDKでも出来るのではとも思ってしまいます。
これからは DrawThemeBackground()、DrawThemeEdge() 関連で調べていきます。
WM_CTLCOLORBTN で SetTextColor() で変更しても変化がありませんでした。
親プロシージャ版とボタンをサブクラス化などしていろいろと試しましたが
今のところは上手くいきません。
とりあえずオーナードローでXP以降のテーマのボタンを描画する方向で問題を
解決していきます。一旦「解決」にチェックしておきます。
また何かあったら追記などをお願いします。
それでは。