1

次のコードは、フォームが (透過的に) 表示される直前に画面に黒いちらつきを生成します。そのちらつきを取り除くためのオプションは何ですか?

   Form f = new Form();
   f.BackColor = Color.Lime;
   f.TransparencyKey = f.BackColor;
   f.StartPosition = FormStartPosition.Manual;
   f.Bounds = Screen.PrimaryScreen.WorkingArea;
   f.Show();

新しいプロジェクトを作成し、フォームの背景を Lime に、TransparencyKey を Lime に設定して、[実行] をクリックしても同じ結果が得られます。

私が試したこと:

  1. 不透明度を 99% に設定 -- 同じちらつき

  2. OnCreateParams で WS_EX_COMPOSITED を強制するか、SetWindowLong を使用します -- 同じちらつき

  3. ウィンドウを小さく表示するか、幅を 0 にするか、画面外に表示してから、目的の場所に移動します。フォームの背後にあるウィンドウが正しく再描画されないという表示上の問題が発生します。

  4. ControlStyles.Opaque、ControlStyles.UserPaint、およびその他のいくつかの ControlStyles コンボを設定し、さまざまなペイント/背景ペイント イベントをオーバーライドすると、同じちらつき、ちらつきが悪化する、またはフォームが透明でないなど、さまざまな結果が生じます。

WPF への移行はオプションかもしれませんが、答えとして「WPF を使用する」ことを実際に探しているわけではありません。

4

1 に答える 1

5

Opacityを 0.01 に設定します。

フォーム (またはその一部) を表示する必要がある場合は、フォームの作成が完了したら、不透明度を再設定します。

Form f = new Form { Opacity = 0.01 };
f.Show();
f.BeginInvoke( new Action(() => f.Opacity = 0.99 ));

編集:Tergiverが提案したようにクリーナーを更新

于 2012-05-04T17:59:28.397 に答える