プッシュボタンの文字色のみの変更方法 – プログラミング – Home

プッシュボタンの文字色のみの変更方法
 
通知
すべてクリア

[解決済] プッシュボタンの文字色のみの変更方法


オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
Topic starter  

★初めて質問します。
・Windows XP Home SP2
・VC++2003 Win32 SDK(SDI)
・今、ダイアログベースのアプリで電卓ソフトを作成中です。

質問内容はプッシュボタンの文字色のみの変更方法を探っています。
過去のログやネット検索により「オーナードロー」すれば背景色、文字色、画像など
いろいろと描画できるようですが、ボタンの見た目を Windows XP の Luna スタイルで
文字色のみの「色」を変更したいのです。つまり、Windows 電卓のボタンのように数字

記号などの「文字色」のみを変更したいのです。背景などはそのまま残したいです。

そこで「文字色のみの変更」方法を教えて欲しいのです。
お願いします。


引用未解決
トピックタグ
つばさ
 つばさ
(@つばさ)
ゲスト
結合: 23年前
投稿: 16
 

こんちわ

そのオーナードローを使用し、文字色の部分だけを変更し
他のとこはそのまま使用すればいいんじゃないですか?


返信引用
オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
Topic starter  

つばささん。
アドバイスありがとうございます。

下の URL を参考にしています。
この内容でどこの部分をカットすればよいのですか?
ボタン枠を描画しないと Windows が描画してくれるのですか?
もう少し具体的にお願いします。

http://ww1.enjoy.ne.jp/~turikiti/knowledge/program/backcolor.htm


返信引用
K
 K
(@K)
ゲスト
結合: 23年前
投稿: 98
 

> この内容でどこの部分をカットすればよいのですか?
OnDrawItem()で書かれているコードすべてです。

> ボタン枠を描画しないと Windows が描画してくれるのですか?
> もう少し具体的にお願いします。
オーナードローするということは、ボタンの枠、背景、文字、フォーカス、選択状態の
有無など、すべてを自分で描画しなければいけません。
Windowsは一切描画してくれません。

また、標準のボタンと同じスタイルが欲しければ、XP以降のテーマにも対応する必要が
あります。


返信引用
オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
Topic starter  

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

オーナードローではボタンの文字色のみを変更することは不可能という事ですね。

そうなるとボタンの文字色を変更するためには、オーナードローで背景色、枠など
すべてを描画する必要があるようですが、ボタンのXPテーマに対応するにはどのような
方法がありますか?あるいは、どうやってテーマと同じ長方形を描画すればよいのです
か?

ヒントでもよいのでお願いします。


返信引用
ppppp
 ppppp
(@ppppp)
ゲスト
結合: 18年前
投稿: 2
 

WM_CTLCOLORBTN。


返信引用
オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
Topic starter  

pppppさん。
ヒントをありがとうございます。

それでは「WM_CTLCOLORBTN」メッセージについて調べてみます。
もう少し情報が欲しいためこのままにします。

まだ何かあればお願いします。


返信引用
オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
Topic starter  

追記。
過去のログから
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200008/00080032.txt
を見つけましたがなぜか色が変わりません。

別情報では「BS_PUSHBUTTON」スタイルまたは「BS_DEFPUSHBUTTON」スタイルは
戻り値に影響されないとなっています。

出来ないということでしょうか?


返信引用
オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
Topic starter  

pppppさんへ。
マイクロソフトの公式ページに
>このメッセージの間、加えられた変更は、コマンド ボタンに影響を与えません。
>描画するために、コマンド ボタンがシステム カラーを常に使用します。
となっています。( http://support.microsoft.com/kb/130952/ja)

「WM_CTLCOLORBTN」以外で文字色だけ変更できる方法があればお願いします。
リンクなどの情報も待っています。


返信引用
K
 K
(@K)
ゲスト
結合: 23年前
投稿: 98
 

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


返信引用
ppppp
 ppppp
(@ppppp)
ゲスト
結合: 18年前
投稿: 2
 

確かに背景色はダメと書いてますね。
でも文字の色だけ変更ですよね?
WM_CTLCOLORBTN、SetTextColor。


返信引用
オレンジフィッシュ
 オレンジフィッシュ
(@オレンジフィッシュ)
ゲスト
結合: 18年前
投稿: 58
Topic starter  

Kさん、pppppさん。
再度の情報をありがとうございます。

C#などの.NET環境を持っていないため現時点ではSDKで頑張ろうと思っています。
また、C#などで行えるのならばSDKでも出来るのではとも思ってしまいます。
これからは DrawThemeBackground()、DrawThemeEdge() 関連で調べていきます。

WM_CTLCOLORBTN で SetTextColor() で変更しても変化がありませんでした。
親プロシージャ版とボタンをサブクラス化などしていろいろと試しましたが
今のところは上手くいきません。

とりあえずオーナードローでXP以降のテーマのボタンを描画する方向で問題を
解決していきます。一旦「解決」にチェックしておきます。
また何かあったら追記などをお願いします。
それでは。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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