我正在关注GDI+ tutorial,在“绘制形状和线条”一节中,有一个简单的例子,它在滚动窗口中绘制一个填充矩形,填充椭圆和实线。它看起来工作正常,但当我向下滚动并向后滚动时,它不能正确滚动,如图所示:
OnPaint
方法是:
protected override void OnPaint(PaintEventArgs e)
{
Graphics dc = e.Graphics;
Point ScrollOffset = this.AutoScrollPosition;
dc.TranslateTransform(ScrollOffset.X, ScrollOffset.Y);
if (e.ClipRectangle.Top + ScrollOffset.X < 350 ||
e.ClipRectangle.Left + ScrollOffset.Y < 250)
{
dc.DrawRectangle(BluePen, rectangleBounds);
dc.FillRectangle(CrossBrush, rectangleBounds);
dc.DrawEllipse(RedPen, ellipseBounds);
dc.FillEllipse(SolidAzureBrush, ellipseBounds);
dc.DrawLine(BrickWidePen, rectangleBounds.Location, ellipseBounds.Location + ellipseBounds.Size);
}
base.OnPaint(e);
}
(其余的代码可以在上面链接的页面上看到,如果重要的话)。
如果我最小化并恢复它修复了问题,那么看起来好像没有在正确的时间调用OnPaint方法(正在被调用的OnPaint
方法和实际绘制之间滚动的窗口发生?)。那么应该如何我处理油漆,以便滚动不会破坏图像?