こんにちは。いつもお世話になっています。
早速質問なのですが、ツールバーにあるビットマップボタンの
透過して欲しい領域がくすんでしまいます。
m_Image.Create( IDB_BM_TOOLBAR,16,1, RGB(127,127,127));
このようにしているのですが、引数のRGBのところをいろいろ変えたのですが駄目でした。
使っているビットマップが256色だから駄目なのでしょうか?
どうしてもくすみを取りたいのでご存知の方いらっしゃいましたらお願いします。
追記です
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));
こんなこともやってみたのですが駄目でした。
もともとのボタンがかかれているビットマップ自体が標準のシステムカラーなのに
そのグレーのシステムカラーだけくすんでしまうのか非常に不思議です。
> そのグレーのシステムカラーだけくすんでしまうのか非常に不思議です。
くすんでいるのではなくて,
「画面のプロパティ」で設定した,「3Dオブジェクト」の色に変換されているのではないでしょ
うか?。
だとしたら,ウィンドウの枠などの色に合わせるための配慮だと思います。
# 以前,SDK だけで組んでいて TB_ADDBUTTONS で1つずつボタンを追加したときは,
# 変換されなかったような気がするのですが。よく覚えていないです。
#(なんか自分で変換するコードを書いたような気もする。)
レス有難うございます。
システムカラーに全然依存されてないんですよ。
私は標準の環境で(win2000)やっているのですが、
本来なら灰色であるべきところが、薄い水色になるんです。
それで、もっと困っているのがアイテムを無効化したときに
その関係で?ボタンが潰れてしまうんです。
本来なら透過されなきゃいけないところが、透過されないので
ボタンが変な風になるんですよ。
困りました。
あ~なるほど。
> # 以前,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, ビットマップ上での透過させたい部分の色);
ちなみに,
MFC のソースで色の変換をしているのは,
AfxLoadSysColorBitmap という関数です。
VC 6.0 の場合です。
> CToolBar::LoadBitmap も色の変換をしてくれるようですけど,
> これは使えないのでしょうか?
256色だから使えないのですね。失礼しました。
> 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));
> 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));
ILC_COLOR8 より ILC_COLOR24 のほうがよさそうです。
遅れましたが、kazumaさんわざわざご丁寧にここまでして頂いて
有難うございます。
お陰で解決することが出来ました。有難うございます。