问题描述
- 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)
这里是做一个判断,只绘制可见区域内的,以便提高性能
时间: 2024-08-31 16:18:23