8

C# でカスタム コントロールを作成したいと考えています。しかし、コントロールを完全に再描画する必要があるたびに、ダブル バッファリング (最初にイメージに描画し、それをブリット) を使用しても、ちらつきます。

完全に再描画する必要がある場合、ちらつきをなくすにはどうすればよいですか?

4

4 に答える 4

13

InitiliseComponent 呼び出しの後に、コンストラクターに以下を入れてみてください。

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
         ControlStyles.UserPaint |
         ControlStyles.AllPaintingInWmPaint, true);

編集:

これを試してみる場合は、可能であれば、独自のダブル バッファリング コードを削除し、適切な仮想メソッドが呼び出されたことに応じて、コントロールが自分自身を描画するようにします。

于 2008-09-15T16:36:43.003 に答える
8

これは、動作中の C# プログラムから取得しました。他のポスターには構文エラーがあり、明らかに C# ではなく C++ からコピーされています

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
                        ControlStyles.UserPaint |
                        ControlStyles.AllPaintingInWmPaint, true);
于 2008-12-11T01:54:46.163 に答える
1

電話するだけでもいいかもしれません

SetStyle(ControlStyles::UserPaint | ControlStyles::AllDrawingInWmPaint, true);

Windows が最初に (WM_ERASEBKGND を介して) コントロールの背景を描画し、次に (WM_PAINT を介して) 必要な描画を行うようにコントロールに要求するため、ちらつきが発生する可能性が最も高くなります。バックグラウンド ペイントを無効にし、OnPaint オーバーライドですべてのペイントを実行すると、ダブル バッファリングに必要なすべてのメモリを使用する必要なく、99% のケースで問題を解決できます。

于 2008-09-17T05:24:17.707 に答える
0

あなたはダブルバッファリングを試みたと言いますが、最初に Image に描画し、それをブリットすると言います。イメージで自分で行うのではなく、コンストラクターで DoubleBuffered = true を設定しようとしましたか?

于 2008-09-15T16:16:43.253 に答える