MFCのカスタムボタンでビットマップの透過が出来ない – プログラミング – Home

MFCのカスタムボタンでビットマップの...
 
通知
すべてクリア

MFCのカスタムボタンでビットマップの透過が出来ない


tomtom
 tomtom
(@tomtom)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

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もスタイルか何かの問題なのかなあと思うのですが…


引用解決済
トピックタグ
...
 ...
(@...)
ゲスト
結合: 22年前
投稿: 113
 

↓まんまのサンプル

オーナードローでボタンにBitmap画像を貼り付ける
http://homepage3.nifty.com/mitui707/VisualC/VCod_btn.html/


返信引用
tomtom
 tomtom
(@tomtom)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

pDC->SetBkMode(TRANSPARENT);
m_list.Draw(pDC, 0, CPoint(0,0), ILD_TRANSPARENT);

DrawItem内で上記の方法でサンプルの通りにやってみましたが、
やはり基本背景色でしか透過されないようです。

サンプルと違う部分はビットマップの色数と透過色です。
「使えるBitmap画像は16色か256色です。」と書いてあるので、
そもそもイメージリストでは16ビット以上は推奨できないのでしょうか。


返信引用
tomtom
 tomtom
(@tomtom)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

ボタンでやるのは厳しそうなのでCStaticをボタン風に使おうかなと思います。


返信引用
gak
 gak
(@gak)
ゲスト
結合: 21年前
投稿: 132
 

参考になるかと。
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200712/07120020.txt


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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