日期:2014-05-18  浏览次数:20786 次

问个Panel重绘的问题,
private void panel1_Paint(object sender, PaintEventArgs e) 
  {
  Rectangle rc = e.ClipRectangle;
  rc.Width = rc.Width - 1;
  rc.Height = rc.Height - 1;
  e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.Red)), rc);
  }

上面我绘制Panel的边框,
为什么要加两行:
  rc.Width = rc.Width - 1;
  rc.Height = rc.Height - 1;
才能显示右边框和下边框,
如果不加这两行,那右边框和下边框就不显示出来,为什么?

------解决方案--------------------
e.ClipRectangle是剪裁区域,在这个区域之外画任何图形都会被剪掉不能显示,而e.ClipRectangle.Width和e.ClipRectangle.Height是剪裁区域的边界,边界上画图是否剪裁,这就要看微软如何设计,微软设计为在这两条边界上画图也要被剪裁掉不显示,所以你只能把线画在Width和Height各减1的位置才能显示,

------解决方案--------------------
探讨

引用:
e.ClipRectangle是剪裁区域,在这个区域之外画任何图形都会被剪掉不能显示,而e.ClipRectangle.Width和e.ClipRectangle.Height是剪裁区域的边界,边界上画图是否剪裁,这就要看微软如何设计,微软设计为在这两条边界上画图也要被剪裁掉不显示,所以你只能把线画在Width和Height各减1的位置才能显示,


那是不是所……

------解决方案--------------------
应该差不多吧,不过这是细节问题,因为ClipRectangle大小是控件设置的,不同的控件可能设置不同的范围,也可能有些控件就把ClipRectangle设置为多一个像素,这时候就可以在边框上画,

探讨

引用:
e.ClipRectangle是剪裁区域,在这个区域之外画任何图形都会被剪掉不能显示,而e.ClipRectangle.Width和e.ClipRectangle.Height是剪裁区域的边界,边界上画图是否剪裁,这就要看微软如何设计,微软设计为在这两条边界上画图也要被剪裁掉不显示,所以你只能把线画在Width和Height各减1的位置才能显示,


那是不是所……