ツールバーのボタンの透過領域がくすむ

[戻る]
トンチャモン 2003/10/11(土) 11:37:34
こんにちは。いつもお世話になっています。

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

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

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

トンチャモン 2003/10/11(土) 11:47:19
追記です

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 2003/10/11(土) 12:10:32
> そのグレーのシステムカラーだけくすんでしまうのか非常に不思議です。

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

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

トンチャモン 2003/10/11(土) 12:41:13
レス有難うございます。

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

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

困りました。

kazuma 2003/10/11(土) 15:41:35
あ〜なるほど。

> # 以前,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 2003/10/11(土) 15:55:25
ちなみに,
MFC のソースで色の変換をしているのは,
AfxLoadSysColorBitmap という関数です。

VC 6.0 の場合です。

kazuma 2003/10/11(土) 16:19:43
> CToolBar::LoadBitmap も色の変換をしてくれるようですけど,
> これは使えないのでしょうか?

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

kazuma 2003/10/11(土) 16:33:36
> 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 2003/10/11(土) 16:53:32
> 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 2003/10/11(土) 17:09:04
ILC_COLOR8 より ILC_COLOR24 のほうがよさそうです。

トンチャモン 2003/10/15(水) 18:23:50
[[解決]]
遅れましたが、kazumaさんわざわざご丁寧にここまでして頂いて
有難うございます。

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

古いスレッドには追加発言できません。