セットアップ:私は領域が定義された領域(SetWindowRgn()
で作成)を持っており、 (SetWindowPos()
で)、そのピクセルのいくつかが親のウィンドウ領域のクリップされた部分と重なるようにします。ウィンドウ領域、移動中の子、DWM、作成することができる白いブロックのつぶやき
結果:これらのピクセルは完全に透明ではなく(親の領域外にあるため)、完全に不透明で完全な白のピクセルで塗りつぶされます。子ウィンドウがどのように見えるのかにかかわらず、問題のピクセルが白であるため、子ウィンドウが描画されてはならないときに描画されているわけではありません。
以下では、小さなオレンジの子ウィンドウが親のエッジに沿って少し移動しました。これは透明なウィンドウ領域を持つ辺に沿ってのみ発生します(したがって、白いピクセルは常に親ウィンドウの最大矩形内に制限されます)。
親ウィンドウが非表示にして、(単に無効と再描画を強制的に白画素をクリアしていない)に示されている場合物事は自分自身を修正します。
これはVistaと7の両方で確認されています。デスクトップウィンドウマネージャ(DWM)を無効にすると、この動作はなくなります。 1つのケースでは、グラフィックドライバを更新した後も消えてしまいました。おそらくそれはこの問題に関連しているでしょうか?:Vista live thumbnail issue with SetWindowRgn。私はもともとこれを稀なバグとして報告するつもりでしたが、それは十分な精査を保証するために十分に切り取ったものです。
これまでに他の誰かがこれまでに対抗していますか? DWMとウィンドウ領域がどのように相互作用するかについての洞察はありますか?
また、私はアプリケーションごとにDWMを無効にすることができますが、起動時とシャットダウン時に画面が飛び出すのに加えて、アプリケーションの実行中にすべての機能を無効にすることができます。問題。
別のグラフィックスカード(別のマシン)で試しましたか? また、塗料のアルファチャンネルを正しくGDIペイントしていることを確認しましたか? –
これは実際にはアルファチャンネルがないため、原因を絞り込むために物事を単純化しているためです。テストの唯一の透明画はウィンドウ領域からのものです。私はかなりのマシンで試してみましたが、ほとんどの人がこの問題を抱えていません。実際にこの問題を抱えているのはほんの一握りのマシンですが、毎回再現可能なマシンです。 –
故障しているすべてのマシンに共通のビデオカードメーカーがありますか?あなたの情報に基づいて、私はビデオドライバのバグを強く疑う。 –