2011-10-30 18 views
0

私はwin32アプリケーション(MFCなし)にオーナー描画ボタンを実装しました。このボタンは、通常の20x20ビットマップ(透明な丸いアイコン)です。問題はボタンが無地の背景に配置されていて、ボタンが灰色の背景を見ることができることです(ビットマップは丸いので)。私はNULL_BRUSHと幸運とWM_CTLCOLORBTNに応答しようとしました..私はビットマップとicoファイルを使用してボタンを表示しようとしましたが、誰もがこの問題を解決する方法を知っていますか?透明な画像のwin32 C++オーナー描画ボタン

これは私の問題であり、設定アイコンを使用すると、非矩形制御をしようとしているように聞こえるエッジ(白ではない/グレー)

enter image description here

+0

あなたは実際に何をしようとしていますか?完全に見えないボタンを作る? –

+0

いいえ設定ボタンです。丸いアイコンなので、端に灰色の背景が見えます。 – blejzz

+0

それは非常に不明ですが、あなたが求めたものを得たように思えます。画像は*ボタンの背景に対して透明です。あなたが実際に*親の*バックグラウンドに対して透過的にしたい場合は、WS_EX_TRANSPARENTスタイルビットを扱う必要があります。 –

答えて

1

@ joelの答えに加えて、いくつかのイメージエディタ(RGB(0xFF、0x00,0xFF))を使用してトランスペアレンシーを持たせたい領域に、トランスペアレントな領域をユニークな色にしたい場合は、次に使用してくださいTransperantBlt

+0

transparnetBlt関数を使用しても機能しませんでした(デフォルトのボタンの背景を削除しなければならなかった)。だから私はTransparentBltを結合し、トリックをしたWM_CTLCOLORBTNメッセージにhollow_brushを返しました。 – blejzz

2

で透明であるべきです。

SetWindowRgnに電話して、制御が長方形でないことをWindowsに伝えることができます。

1

あなたは固体の背景だと言うあなたの画像は、バックグラウンドとして、いくつかの種類のオレンジ色の勾配を示しています。実際に標準のWindowsボタン単色だった場合は、LR_LOADMAP3DCOLORSまたはLR_LOADTRANSPARENTを使用してLoadImageでビットマップをロードできます。あなたはグラデーションを持っているので、ビットマップをマスクするためにもっと複雑なテクニックを使わなければなりません。 http://www.winprog.org/tutorial/transparency.html

関連する問題