C# でカスタム コントロールを作成したいと考えています。しかし、コントロールを完全に再描画する必要があるたびに、ダブル バッファリング (最初にイメージに描画し、それをブリット) を使用しても、ちらつきます。
完全に再描画する必要がある場合、ちらつきをなくすにはどうすればよいですか?
InitiliseComponent 呼び出しの後に、コンストラクターに以下を入れてみてください。
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
編集:
これを試してみる場合は、可能であれば、独自のダブル バッファリング コードを削除し、適切な仮想メソッドが呼び出されたことに応じて、コントロールが自分自身を描画するようにします。
これは、動作中の C# プログラムから取得しました。他のポスターには構文エラーがあり、明らかに C# ではなく C++ からコピーされています
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
電話するだけでもいいかもしれません
SetStyle(ControlStyles::UserPaint | ControlStyles::AllDrawingInWmPaint, true);
Windows が最初に (WM_ERASEBKGND を介して) コントロールの背景を描画し、次に (WM_PAINT を介して) 必要な描画を行うようにコントロールに要求するため、ちらつきが発生する可能性が最も高くなります。バックグラウンド ペイントを無効にし、OnPaint オーバーライドですべてのペイントを実行すると、ダブル バッファリングに必要なすべてのメモリを使用する必要なく、99% のケースで問題を解決できます。
あなたはダブルバッファリングを試みたと言いますが、最初に Image に描画し、それをブリットすると言います。イメージで自分で行うのではなく、コンストラクターで DoubleBuffered = true を設定しようとしましたか?