c#高级编程第三版575页 第20章20.4 绘制可滚动的窗体 有点小问题不明白,有请高手指点一下!!
第20章20.4 绘制可滚动的窗体 原文的网址如下:
http://book.csdn.net/bookfiles/16/100165570.shtml
把代码也贴出来,private Point rectangleTopLeft = new Point(0, 0);
private Size rectangleSize = new Size(200, 200);
private Point ellipseTopLeft = new Point(50, 200);
private Size ellipseSize = new Size(200, 150);
Pen bluePen = new Pen(Color.Blue,3);
Pen redPen = new Pen(Color.Red);
public Form1()
{
InitializeComponent();
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = "Form1";
this.Text = "BigShapes";
this.BackColor = Color.Wheat ;
this.AutoScrollMinSize = new Size(250, 350);
}
protected override void OnPaint(PaintEventArgs e)
{
Size scrollOffset = new Size();
scrollOffset = (Size)this.AutoScrollPosition;
Graphics dc = e.Graphics;
if (e.ClipRectangle.Top + scrollOffset.Width < 350 && e.ClipRectangle.Left + scrollOffset.Height < 250)
/* 疑惑: 此处是为了检查无效区域的左上角坐标是否位于文档矩形区域内,要是在其内,则重绘,否则就不必须了,但此处e.ClipRectangle.Top 是y轴坐标,scrollOffset.Width是水平坐标!!!什么意思呀,看半天看不明白!! e.ClipRectangle.Left + scrollOffset.Height 也一样,是不是原书写错了,反过来了呀*/
{
Rectangle rectangleArea = new Rectangle(rectangleTopLeft + scrollOffset , rectangleSize);
dc.DrawRectangle(bluePen, rectangleArea);
Rectangle ellipseArea = new Rectangle( ellipseTopLeft + scrollOffset ,ellipseSize );
dc.DrawEllipse(redPen, ellipseArea);
}
base.OnPaint(e);
}
-------------------------------------------------------------------------------------
if (e.ClipRectangle.Top + scrollOffset.Width < 350 && e.ClipRectangle.Left + scrollOffset.Height < 250)
/* 疑惑: 此处是为了检查无效区域的左上角坐标是否位于文档矩形区域内,要是在其内,则重绘,否则就不必须了,但此处e.ClipRectangle.Top 是y轴坐标,scrollOffset.Width是水平坐标!!!什么意思呀,看半天看不明白!! e.ClipRectangle.Left + scrollOffset.Height 也一样,是不是原书写错了,反过来了呀*/
Rectangle rectangleArea = new Rectangle(rectangleTopLeft + scrollOffset , rectangleSize); //这里rectangleTopLeft + scrollOffset又是怎么回事呀,滚动条移下来后, 矩形的可见区域明显就小了呀,怎么还是按原来的矩形宽和高画图的呀, 越看越糊涂,有人帮解释一下吗?
第20章20.4 绘制可滚动的窗体 原文的网址如下:
http://book.csdn.net/bookfiles/16/100165570.shtml
把代码也贴出来,private Point rectangleTopLeft = new Point(0, 0);
private Size rectangleSize = new Size(200, 200);
private Point ellipseTopLeft = new Point(50, 200);
private Size ellipseSize = new Size(200, 150);
Pen bluePen = new Pen(Color.Blue,3);
Pen redPen = new Pen(Color.Red);
public Form1()
{
InitializeComponent();
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = "Form1";
this.Text = "BigShapes";
this.BackColor = Color.Wheat ;
this.AutoScrollMinSize = new Size(250, 350);
}
protected override void OnPaint(PaintEventArgs e)
{
Size scrollOffset = new Size();
scrollOffset = (Size)this.AutoScrollPosition;
Graphics dc = e.Graphics;
if (e.ClipRectangle.Top + scrollOffset.Width < 350 && e.ClipRectangle.Left + scrollOffset.Height < 250)
/* 疑惑: 此处是为了检查无效区域的左上角坐标是否位于文档矩形区域内,要是在其内,则重绘,否则就不必须了,但此处e.ClipRectangle.Top 是y轴坐标,scrollOffset.Width是水平坐标!!!什么意思呀,看半天看不明白!! e.ClipRectangle.Left + scrollOffset.Height 也一样,是不是原书写错了,反过来了呀*/
{
Rectangle rectangleArea = new Rectangle(rectangleTopLeft + scrollOffset , rectangleSize);
dc.DrawRectangle(bluePen, rectangleArea);
Rectangle ellipseArea = new Rectangle( ellipseTopLeft + scrollOffset ,ellipseSize );
dc.DrawEllipse(redPen, ellipseArea);
}
base.OnPaint(e);
}
-------------------------------------------------------------------------------------
if (e.ClipRectangle.Top + scrollOffset.Width < 350 && e.ClipRectangle.Left + scrollOffset.Height < 250)
/* 疑惑: 此处是为了检查无效区域的左上角坐标是否位于文档矩形区域内,要是在其内,则重绘,否则就不必须了,但此处e.ClipRectangle.Top 是y轴坐标,scrollOffset.Width是水平坐标!!!什么意思呀,看半天看不明白!! e.ClipRectangle.Left + scrollOffset.Height 也一样,是不是原书写错了,反过来了呀*/
Rectangle rectangleArea = new Rectangle(rectangleTopLeft + scrollOffset , rectangleSize); //这里rectangleTopLeft + scrollOffset又是怎么回事呀,滚动条移下来后, 矩形的可见区域明显就小了呀,怎么还是按原来的矩形宽和高画图的呀, 越看越糊涂,有人帮解释一下吗?
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
if (e.ClipRectangle.Top - scrollOffset.Height < 350 && e.ClipRectangle.Left + scrollOffset.Width < 250)
Rectangle rectangleArea = new Rectangle(rectangleTopLeft + scrollOffset , rectangleSize);//此处正确有朋友来说一下对这段代码的理解吗
if (e.ClipRectangle.Top - scrollOffset.Height < 350 && e.ClipRectangle.Left -scrollOffset.Width < 250)
Rectangle rectangleArea = new Rectangle(rectangleTopLeft + scrollOffset , rectangleSize);//此处正确有朋友来说一下对这段代码的理解吗