問題タブ [ws-ex-transparent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - WM_EX_TRANSPARENT は子ウィンドウを再描画しません
WM_EX_TRANSPARENT
透明性を伴うダブルバッファリングを行うために、一部のウィンドウでウィンドウ スタイルを使用しています。ただし、InvalidateRect
親ウィンドウで行うと、子ウィンドウが再描画されないため、問題が発生しています。
子ウィンドウを反復して再描画するのは親ウィンドウの責任ですか、それとも間違っていますか? それが親ウィンドウの責任である場合、親の無効な長方形内にすべての子ウィンドウを取得するにはどうすればよいですか?
これは、私が話している動作を示す完全にコンパイル可能な例です。親ウィンドウの上にマウスを移動すると、ボタンが消えることがわかります。ボタンをクリックすると、ボタン自体が再描画されますが、マウスを離して親ウィンドウに戻ると、再び消えます。
最終的な解決策
以下の回答が示唆するように行うことでした。次に、親ウィンドウのWM_PAINT
メッセージでWM_PAINT
各子に a を送信し、子に親のダブルバッファにペイントさせ(それ自体には何も描画しません)、親BitBlt
にバッファを持たせます(描画されています)それ自体で、次にその子のそれぞれが Z オーダーの下から上に移動することによって) にHDC
. これにより、親子でちらつきのない描画が可能になり、子は透明になります。到達した最終的なデモ プログラムは次のとおりです。
これを理解するのに多くの時間を費やしてくれたjohnathonに再び感謝します.
panel - 透明パネルをクリアするには?
このような透明なパネルを作成しました(C#で):
通常のパネルの上に表示されます。他のパネルに何かを表示するために円を描きたいので、透明の OnPaint メソッドに円を描きます。次に、別のものを表示したいので、この円を別の場所に「移動」する必要があります。
しかし、私はできません。
OnPaint メソッドでこの円を描画しますが、ここで見つけた解決策はどれもうまくいきませんでした。イベントの Graphics オブジェクトは使用しません。使用しても何も表示されないからです。
だから、私はこれを使用する必要があります:
背景色を使用して、その上に別の円を描くことはできません。背景は透明のままにする必要があります。また、Color.Transparent で円を描くことはできません。
透明なパネルをクリアすると、透明なパネルが黒の背景に置き換わります。
命令
コンパイルしません。
これもそうではありません:
Color パラメータが必要だからです。
この:
黒の背景を作成します。
考えられる限りのことはすべて試したように思えます。
何か案が ?