日期:2014-05-20  浏览次数:20962 次

gdi+如何实现局部重画
现在我有一个自定义控件,我把这个自定义控件作为画布,然后在这个画布上添加各种控件,添加上的控件可以拖动和改变大小,当我把一个添加上的控件移动的时候,整个画布都重绘了,几个控件的时候还没什么感觉,但是控件多的时候就会出现卡了,已经使用了双缓冲,今天在网上看到了一篇文章,是关于局部刷新的,但只是简单的说了下,求大神给思路或者上点源码。

------解决方案--------------------
局部刷新也是刷新移动的距离,由于不能确定移动多少距离,也就无法确定到底要局部刷新多少范围,不理想,另外一个控件上放N个控件还外带paint更不理想,建议用临时图片双缓存,或者把要拖动的控件等用绘制来代替,控件事件自行在鼠标事件中编写.
------解决方案--------------------
C# 这方面功能有限,建议去C++/C哪里问
------解决方案--------------------
给你个思路:

先记录控件所在位置RECT,在控件的Move事件里:

把现在的RECT跟原来的RECT得到一个大的矩形,有如:
UniteBox.minX = min(OldBox.minX, NewBox.minX);
UniteBox.minY = min(OldBox.minY, NewBox.minY);
UniteBox.maxX = max(OldBox.maxX, NewBox.maxX);
UniteBox.maxY = max(OldBox.maxY, NewBox.maxY);

最后刷新这个大的矩形框!