5

ピクセルごとの alphablend を使用してビットマップを表示するカスタム コントロールを作成しようとしています (他の質問で既に知っている人もいます)。

現在、リソース エディターでカスタム コントロールを使用しており、それを CWnd から派生したクラスにアタッチしています。カスタム クラスを登録するときに、WNDCLASS 構造体の hbrBackground を NULL_BRUSH に設定して、コントロールの透過性を実現します。

コントロールの OnPaint では、AlphaBlend を使用して、ピクセルごとのアルファ ブレンド ビットマップをペイントします。

これは非常にうまく機能しますが、次の2つの問題があります。

  • マウスがコントロールの上にあるときに表示されるビットマップを変更したい。コントロールは透明であるため、一方のビットマップが他方のビットマップと重なっていない領域は消去されません。画像が変更されたときに背景を消去するにはどうすればよいですか?

  • 2 番目の問題は、2 つの重複するコントロールに関連しています。私のコントロールは、グラデーションを持つ他のコントロール上に描画されます (実際には他のコントロール内にあります)。問題は、自分のコントロールを z オーダーの前に置くと、他のコントロールが自分のコントロールと重なり、自分のコントロールが表示されないことです。Z オーダーの前に他のコントロールを配置すると、コントロールでマウス メッセージを取得できません。

たぶん、私は何か間違ったことをしている、または自分のコントロールを実装しようとしている方法が間違っています。どんな種類の助けもいただければ幸いです。

ありがとう、

ハビエル

4

1 に答える 1

1

私はチャンスを取ります。:-)

これにより、私が望むことを達成するために必要なすべてが得られるはずです。

透明なコントロールの一般的な解決策

Z オーダーの問題に関する限り、z オーダーはメッセージの優先度には影響しません。そこで何が起こっているかを判断できるように、いくつかのコードを投稿する必要があります。

于 2010-08-17T18:49:43.340 に答える