WEB开发网
开发学院软件开发C语言 [叩响C#之门]写给初学者:滚动条原理 阅读

[叩响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所示)。

[叩响C#之门]写给初学者:滚动条原理

(拖动滚动条时图像向上平移50像素)

图17-24 最小化窗口再恢复,图像变为初始模样 图17-25 按需绘制的方式

上一页  1 2 3 4  下一页

Tags:叩响 写给 初学者

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接