質問

透明性のあるトップレベル(つまり、WS_CHILDではなく)ウィンドウを作成したいと思います。ただし、特定のピクセルが完全に透明または完全に不透明であるシンプルなマスクになりたくありません。そして、ウィンドウ全体がアルファレベルを持っているようにしたくありません。むしろ、窓を基本的に完全に透明にしたいと思います。ビットマップがアルファチャネルで描かれ、ビットマップが背後にある窓とブレンドされます。写真、たとえば、サンバースト。イメージのアルファが不透明から完全に透明になって中心から完全に透明になっています。

私は両方とも私がやりたいことに近づく2つの方法を見つけましたが、完全ではありません。領域を使用して、完全に透明に描かれたセクションを切り取ることができます。階層化されたウィンドウを使用して、私は同様のことをすることもできます(または、ウィンドウ全体をわずかに透明にすることさえできますが、それは私が望むものではありません)。 ws_ex_transparentやws_ex_compositeなど、他のスタイルを調べましたが、役に立ちませんでした。

子どもたちは親の領域内の親の窓と溶け込んでいるので、この種の効果を子どもの窓でうまく機能させることができます。トップレベルのウィンドウで同様に機能させることは、私を逃れ続けています。

人々が他のプログラムでそれを見たことを保証しているので、私はこれができることを知っています。ここで窓のペイントについて簡単なことを完全に理解していないように感じます。

役に立ちましたか?

解決

レイヤードウィンドウ (WS_EX_LAYERED)あなたが使用する必要があることに留意して、仕事をする必要があります UpdateLayeredWindow() ピクセルあたりのアルファ値を指定するためのやや珍しいビットマップ形式(32ビット、事前総合アルファ)(32ビット)SetLayeredWindowAttributes() ウィンドウまたはカラーキー全体に単一のアルファ値を指定することのみを可能にします。

あなたはすでにこれを試したと言います - あなたはどのような問題を経験しましたか?

他のヒント

ウィンドウでピクセルあたりのアルファを取得するために私が知っている唯一の方法は、updateLayeredWindow()です。
このMSDNリンクをご覧ください: http://msdn.microsoft.com/en-us/library/ms997507.aspx

updateLayeredWindowを使用する場合、アプリケーションはWM_Paintまたはその他のペイントメッセージに応答する必要がないことに注意してください。これは、ウィンドウの視覚的表現をすでに提供しており、システムはその画像を保存し、構成し、それをレンダリングするために、画面。 updateLayeredWindowは非常に強力ですが、既存のWin32アプリケーションの描画方法を変更する必要があることがよくあります.

私はこれらがあなたが経験していた問題だと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top