カスタム ダブル バッファリングを実装しようとしましたが、ちらつきが発生します。
これは、コントロール (Control から継承するカスタム コントロール) コンストラクターのコードです。
bufferContext = new BufferedGraphicsContext();
SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
SetStyle(ControlStyles.DoubleBuffer, false);
SetStyle(ControlStyles.ResizeRedraw, false);
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
SetStyle(ControlStyles.Opaque, true);
OnPaint イベント:
protected override void OnPaint(PaintEventArgs e)
{
if (buffer == null)
{
Draw(e);
return;
}
if (Repaint)
{
Repaint = false;
PaintEventArgs pe = new PaintEventArgs(buffer.Graphics, e.ClipRectangle);
Draw(pe);
}
buffer.Render(e.Graphics);
}
また、このコードは、バッファリングに関連するサイズ変更時にアクティブ化されます。
Graphics g = this.CreateGraphics();
if (buffer != null)
{
buffer.Dispose();
buffer = null;
}
if (!(bufferContext == null || DisplayRectangle.Width <= 0 || DisplayRectangle.Height <= 0))
{
buffer = bufferContext.Allocate(g, DisplayRectangle);
Repaint = true;
}
Draw メソッドは複雑ですが、最初にコントロールを BackColor で塗りつぶし、他は関係ありません。
ほとんどの場合、ウィンドウのサイズを変更するときにちらつきが発生することがあります。私が認識しているように、最初にコントロールの上に黒が塗りつぶされ、次にバッファからグラフィックスが塗りつぶされ、ちらつきが発生します。ただし、BackColor が黒になることはありません。
これを止めるにはどうすればよいですか?