滚动GDI +对象时的虚假行

时间:2016-02-13 00:54:06

标签: c# winforms gdi+

我正在关注GDI+ tutorial,在“绘制形状和线条”一节中,有一个简单的例子,它在滚动窗口中绘制一个填充矩形,填充椭圆和实线。它看起来工作正常,但当我向下滚动并向后滚动时,它不能正确滚动,如图所示:enter image description here

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方法和实际绘制之间滚动的窗口发生?)。那么应该如何我处理油漆,以便滚动不会破坏图像?

0 个答案:

没有答案