我现在得结构是,我自己编写了一个容器类,需要画出来得图形构造成几个类用户新增图形的时候,在容器的点击事件里面判断,往一个ELEMENTLIST列表里面加载实例化的图形类当这些图形有几十个以后,我感觉移动都比较缓慢。
还有如果是根据数据库的数据批量生成图形,在界面上会出现一个画图的过程请教高手,怎么能优化这些操作

解决方案 »

  1.   

    你的图形元素不一定是控件,可是以类,我新版的打印就是这样做的。统一一个接口,如IGoldPrinterElement,至少有一个Draw(Graphacis g)方法。这样,无论以后扩展多少个图形元素,只需要实现这个接口即可,再加一个实现此接口的确基类GoldPrinterElement和集合GoldPrinterElementCollection。你做一个控件如GoldPrinterGraphicsControl,或者你说的容器控件,申明一个GoldPrinterElementCollection并实例化,这样,在你的控件上(菜单或有图形样式的图片按钮都可)执行一命令,则增加一个继承于GoldPrinterElement的实例如点、线、矩形、圆、椭圆、标签、文本框、表格等,并把它加到GoldPrinterElementCollection中,在控件GoldPrinterGraphicsControl的OnPaint中循环每一个GoldPrinterElementCollection集合中的GoldPrinterElement并调用它的Draw(e.Graphacis)即可。
      

  2.   

    www.AnyReport.Net就是这个思想搞出来的。写程序写的是思想,思路清晰即可。我相信程序员的水平是差不多的,任何一个程序员都可以实现它,只是时间先后问题。希望大家成功!
      

  3.   

    还有,楼主说图形多了速度慢,请启用图形的二级缓存。实际原理就是把图形画到内存中的Image,然后再把这个Image画到绘图表面上
      

  4.   

    高手你所说的统一一个接口定义些什么东西我现在是第一一个基类,里面包括我要绘制的元素的基本属性,比如TEXT,COLOR等等。然后创建自己的元素类,继承自基类,然后做个性化的扩展。其实跟你后面说的基本是一致的。由于我的的这些元素绘制出来以后,需要脱拽,改变大小,根据业务数据判断其状态,根据条件刷新背景色,背景图等等。现在14个图,加载需要380毫秒,到100多个元素的时候,加载估计需要三分钟哦。上次我试有60多个元素的时候拖动就很迟缓,CPU占用100%.你说的二级缓冲就是所谓的双缓冲? 但是因为我的元素显示出来以后还需要框选,点选,拖拽,用了二级缓存打出来还能不能对元素进行操作?而对每个元素进行二级缓存,效率能提高多少?
      

  5.   

    在控件上有鼠标移动事件,这样有热点的图形可以加边框,如果鼠标是按下并移动的,图形就可移动拖拽,所有这些,实际上就是OnPaint中循环每一个GoldPrinterElementCollection集合中的GoldPrinterElement,如果是当前图形,只需重绘这个图形区,并调用它的Draw(e.Graphacis)速度就快了。二级缓存不是对每个图,而是对你这个控件
      

  6.   

    我发现界面切换得时候都会触发onpain事件OnPaint兄弟有没有详细讲解GDI+中涉及得一些事件得详细说明?还有,能不能给我讲讲打印得实现,比如我要打印预览,那么怎么设置整个图形得放大缩小,划定区域等等
      

  7.   

    你好,我对你的GDI VISIO绘图程序很感兴趣,最近正在开始学习,
    不知道能否Share你的代码让我学习学习?
    感谢啊!
    我的联系方式:
    [email protected]
    能否发到我的油箱,或者MSN跟我联系?