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又是怎么回事呀,滚动条移下来后, 矩形的可见区域明显就小了呀,怎么还是按原来的矩形宽和高画图的呀, 越看越糊涂,有人帮解释一下吗?

解决方案 »

  1.   

    应该是写反啦
      
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  2.   

    个人观点,应该改成:
    if (e.ClipRectangle.Top - scrollOffset.Height < 350 && e.ClipRectangle.Left + scrollOffset.Width < 250)
     Rectangle rectangleArea = new Rectangle(rectangleTopLeft + scrollOffset , rectangleSize);//此处正确有朋友来说一下对这段代码的理解吗
      

  3.   

    个人观点,应该改成:
    if (e.ClipRectangle.Top - scrollOffset.Height < 350 && e.ClipRectangle.Left -scrollOffset.Width < 250)
     Rectangle rectangleArea = new Rectangle(rectangleTopLeft + scrollOffset , rectangleSize);//此处正确有朋友来说一下对这段代码的理解吗