[叩响C#之门]写给初学者:滚动条原理
2010-09-30 20:56:08 来源:WEB开发网核心提示: 原来当重新显示窗体时,发生Point事件,[叩响C#之门]写给初学者:滚动条原理(3),系统调用OnPaint()方法重绘窗体,下面的代码被再次执行,所以Graphics对象把椭圆上半部分重新绘制了一遍,结果就出现了椭圆上半部分出现两次的情况(如图17-24所示), g.FillRectangl
原来当重新显示窗体时,发生Point事件,系统调用OnPaint()方法重绘窗体,下面的代码被再次执行。
g.FillRectangle(Brushes.LightPink, 0, 0, 200, 150);
g.FillEllipse(Brushes.LightGreen, 0, 150, 300, 100);
第一条语句要求以点(0,0)为起点,画一个宽200像素、高150像素的矩形;第二条语句要求以点(0,150)为起点,画一个宽300、高100的椭圆。
然而,Graphics对象绘制图形时并不知道滚动条的变化情况,默认情况下它总是以“工作区左上角”为原点绘制图形的,即它描点时的坐标总是参照“工作区左上角”的。形象地说就是,它总是把文档的左上角和工作区的左上角对齐,然后把文档贴在工作区上。于是图17-22所示的图像重新绘制了一遍,图像变为初始模样。
当我们拖动滚动条时,也会触发Paint事件,重新绘制工作区,但系统并不重新绘制整个工作区。当滚动条向下拖动50像素时,系统首先把工作区中的图像整体向上平移50像素,这时工作区下部出现一块大小为300×50像素的空白(如图17-25所示),系统只需补上这块空白区域即可。这种按需绘制的方式可以大大提高绘图效率。
然而这块空白区域纵坐标范围为150~200,在文档中,正好是椭圆上半部分的位置,所以Graphics对象把椭圆上半部分重新绘制了一遍,结果就出现了椭圆上半部分出现两次的情况(如图17-24所示)。
(拖动滚动条时图像向上平移50像素)
图17-24 最小化窗口再恢复,图像变为初始模样 图17-25 按需绘制的方式
- ››初学者对于三层框架的理解
- ››写给初学者:多线程系列( 十)——死锁(Deadlock)...
- ››写给初学者:多线程系列( 十一)——线程池(Thread...
- ››写给初学者:多线程系列(一)——线程的概念
- ››写给初学者:多线程系列(二)—— Thread类(线程类...
- ››写给初学者:多线程系列(三)——线程的优先级
- ››写给初学者:多线程系列(四)——线程的插入 Join(...
- ››写给初学者:多线程系列(五)——线程的状态
- ››写给初学者:多线程系列(六)——线程同步的概念
- ››写给初学者:多线程系列(七)——互锁(Interlocke...
- ››写给初学者:多线程系列(八)——管程类(Monitor类...
- ››写给初学者:多线程系列( 九)——互斥体(Mutex类...