ツールバーのボタンの透過領域がくすむ – プログラミング – Home

ツールバーのボタンの透過領域がくすむ
 
通知
すべてクリア

[解決済] ツールバーのボタンの透過領域がくすむ


トンチャモン
 トンチャモン
(@トンチャモン)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

こんにちは。いつもお世話になっています。

早速質問なのですが、ツールバーにあるビットマップボタンの
透過して欲しい領域がくすんでしまいます。

m_Image.Create( IDB_BM_TOOLBAR,16,1, RGB(127,127,127));
このようにしているのですが、引数のRGBのところをいろいろ変えたのですが駄目でした。

使っているビットマップが256色だから駄目なのでしょうか?
どうしてもくすみを取りたいのでご存知の方いらっしゃいましたらお願いします。


引用未解決
トピックタグ
トンチャモン
 トンチャモン
(@トンチャモン)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

追記です

m_Image.Create( 16,16, ILC_COLOR | ILC_MASK, 1, 1);

CBitmap Bm;
Bm.LoadBitmap( IDB_BM_TOOLBAR );
m_Image.Add( &Bm, RGB(127,127,127));

こんなこともやってみたのですが駄目でした。
もともとのボタンがかかれているビットマップ自体が標準のシステムカラーなのに
そのグレーのシステムカラーだけくすんでしまうのか非常に不思議です。


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

> そのグレーのシステムカラーだけくすんでしまうのか非常に不思議です。

くすんでいるのではなくて,
「画面のプロパティ」で設定した,「3Dオブジェクト」の色に変換されているのではないでしょ
うか?。
だとしたら,ウィンドウの枠などの色に合わせるための配慮だと思います。

# 以前,SDK だけで組んでいて TB_ADDBUTTONS で1つずつボタンを追加したときは,
# 変換されなかったような気がするのですが。よく覚えていないです。
#(なんか自分で変換するコードを書いたような気もする。)


返信引用
トンチャモン
 トンチャモン
(@トンチャモン)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

レス有難うございます。

システムカラーに全然依存されてないんですよ。
私は標準の環境で(win2000)やっているのですが、
本来なら灰色であるべきところが、薄い水色になるんです。

それで、もっと困っているのがアイテムを無効化したときに
その関係で?ボタンが潰れてしまうんです。
本来なら透過されなきゃいけないところが、透過されないので
ボタンが変な風になるんですよ。

困りました。


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

あ~なるほど。

> # 以前,SDK だけで組んでいて TB_ADDBUTTONS で1つずつボタンを追加したときは,
> # 変換されなかったような気がするのですが。よく覚えていないです。
> #(なんか自分で変換するコードを書いたような気もする。)

ちょうどこのときの状況と同じような気がします。
Windows 2000 の標準では,「3Dオブジェクト」の色は,RGB(212,208,200) です。
この中に灰色のボタンをおくと,水色っぽく見えるかもしれませんね。

で,私も困って MFC の CToolbar::LoadToolBar のソースを調べてところ,
色の変換をしていたので,それを参考にコードを書いたのでした。

CToolBar::LoadBitmap も色の変換をしてくれるようですけど,
これは使えないのでしょうか?

使えない場合,
ひょっとしたら以下のような感じでいけるかもしれません。(未確認)
m_Image.Create( IDB_BM_TOOLBAR,16,1, 「3Dオブジェクト」の色);
Bm.LoadBitmap( IDB_BM_TOOLBAR );
m_Image.Add( &Bm, ビットマップ上での透過させたい部分の色);


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

ちなみに,
MFC のソースで色の変換をしているのは,
AfxLoadSysColorBitmap という関数です。

VC 6.0 の場合です。


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

> CToolBar::LoadBitmap も色の変換をしてくれるようですけど,
> これは使えないのでしょうか?

256色だから使えないのですね。失礼しました。


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

> m_Image.Create( IDB_BM_TOOLBAR,16,1, 「3Dオブジェクト」の色);
> Bm.LoadBitmap( IDB_BM_TOOLBAR );
> m_Image.Add( &Bm, ビットマップ上での透過させたい部分の色);

たびたびすんません。なんか寝ぼけてますね,私。

下記のようなコードで出来ましたよ。
RGB(192,192,192) というのはビットマップで背景部分に使っている色です。

m_imageList.Create(IDB_BITMAP2, 16, 1, RGB(192,192,192));
m_imageList.SetBkColor(::GetSysColor(COLOR_3DFACE));


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

> m_imageList.Create(IDB_BITMAP2, 16, 1, RGB(192,192,192));
> m_imageList.SetBkColor(::GetSysColor(COLOR_3DFACE));

よく見ると16色に減色されてました。

今度こそ大丈夫。なはず。

m_imageList.Create(16, 15, ILC_COLOR8 | ILC_MASK, 1, 1);
m_imageList.SetBkColor(::GetSysColor(COLOR_3DFACE));

CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP2);
m_imageList.Add(&bmp, RGB(192,192,192));


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

ILC_COLOR8 より ILC_COLOR24 のほうがよさそうです。


返信引用
トンチャモン
 トンチャモン
(@トンチャモン)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

遅れましたが、kazumaさんわざわざご丁寧にここまでして頂いて
有難うございます。

お陰で解決することが出来ました。有難うございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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