c# 重绘问题 求解答 doc.drawobjectlist 怎么获取

由于刚学习c#,窗口全屏的时候,控件自适应移动位置,在移动的时候出现严重闪烁,自己查了一下,用双缓冲效果不大,所以用重绘,但是代码完全看不懂。。。求解答,doc.drawobjectlist是从哪里获取的?

 Rectangle rect = e.ClipRectangle;
            Bitmap bufferimage = new Bitmap(this.Width, this.Height);
            Graphics g = Graphics.FromImage(bufferimage);
            g.Clear(this.BackColor);
            g.SmoothingMode = SmoothingMode.HighQuality; //高质量
            g.PixelOffsetMode = PixelOffsetMode.HighQuality; //高像素偏移质量
            foreach (IShape drawobject in doc.drawObjectList)
            {
                if (rect.IntersectsWith(drawobject.Rect))
                {
                    drawobject.Draw(g);
                    if (drawobject.TrackerState == config.Module.Core.TrackerState.Selected
                        && this.CurrentOperator == Enum.Operator.Transfrom)//仅当编辑节点操作时显示图元热点
                    {
                        drawobject.DrawTracker(g);
                    }
                }

            }
            using (Graphics tg = e.Graphics)
            {
                tg.DrawImage(bufferimage, 0, 0);  //把画布贴到画面上
            }

drawobjectlist是示例代码中文档中画布上的图形对象,doc和drawObjectList都是为了演示而写的。

在一个真实的程序中,我们往往使用MVC设计模式,将文档(描述数据)和视图(将数据呈现出来)分开。而不是将绘图的代码写死。
这样你的程序可以方便地修改文档结构,并且通知程序刷新。
foreach (IShape drawobject in doc.drawObjectList)
这是遍历文档中所有的图元(或者说抽象的形状,IShape)
rect.IntersectsWith(drawobject.Rect)
这里是做一个判断,只绘制可见区域内的,以便提高性能