WinXP sp2
VS 2003 MFC ダイアログベースプロジェクト
CButtonの派生クラスを作ってオーナー描画でビットマップを書いています。
ビットマップの書き方はCImageListにカラーキーを指定してAddしています。
m_list.Create( m_bmpinfo.bmWidth, m_bmpinfo.bmHeight, ILC_COLOR24 | ILC_MASK,
0,1);
m_list.Add(&m_bmp, col);
描画はDrawItemで
m_list.Draw(CDC::FromHandle(lpDIS->hDC), 0, CPoint(0,0), ILD_NORMAL);
このように描画しています。
しかし透過がどうやってもコントロールの基本背景色の色でしか透過されてしまい、
直下のピクセルの色で透過してくれません。
このボタンは別の背景色の上や他のビットマップの上に配置されたりするんですが、
真下のピクセルで透過する方法は無いでしょうか?
ちなみに全く同じ方法でCStaticの派生クラスを作り、ツールボックスから
Picture Control(クラスはCStatic)をおいてプロパティのTypeをオーナー描画に設定
して派生クラスに
変数を置き換えると問題なく直下のピクセルを透過してくれます。
CButtonもスタイルか何かの問題なのかなあと思うのですが…
pDC->SetBkMode(TRANSPARENT);
m_list.Draw(pDC, 0, CPoint(0,0), ILD_TRANSPARENT);
DrawItem内で上記の方法でサンプルの通りにやってみましたが、
やはり基本背景色でしか透過されないようです。
サンプルと違う部分はビットマップの色数と透過色です。
「使えるBitmap画像は16色か256色です。」と書いてあるので、
そもそもイメージリストでは16ビット以上は推奨できないのでしょうか。
ボタンでやるのは厳しそうなのでCStaticをボタン風に使おうかなと思います。