好记性不如烂笔头,生活、学习、工作、感悟,记于“笔下”,留于心间。任时光荏苒、世易时移,唯文字不改、记忆不散。

by:蚂蹄儿

Winform剪辑区域

分类:学无止境 - Winform

关键词: c#  winform  剪辑区域  重绘 

来源:蚂蹄儿(www.motyer.cn)

阅读:220发布时间:

  在实际项目中,一般很少用到这个概念,但是如果打算自己绘制一些什么高大上的东西,这个概念就显得比较重要了。

  在C#中,可以通过Graphics类中的实例方法SetClip来设置剪辑区域。该方法具有9个重载,如下: 

public void SetClip(Graphics g);
public void SetClip(GraphicsPath path);
public void SetClip(Rectangle rect);
public void SetClip(RectangleF rect);
public void SetClip(Graphics g, CombineMode combineMode);
public void SetClip(GraphicsPath path, CombineMode combineMode);
public void SetClip(Rectangle rect, CombineMode combineMode);
public void SetClip(RectangleF rect, CombineMode combineMode);
public void SetClip(Region region, CombineMode combineMode);

  在这里,仅仅介绍第三种,其余的与它用法大体相当,不再赘述。


  新建一个Windows窗体,在里面绘制一个三角形,代码如下:

protected override void OnPaint(PaintEventArgs e)
{
	Graphics g = e.Graphics;
	Rectangle rect = new Rectangle(40, 50, 200, 200);
	g.FillPolygon(Brushes.Red, 
		new PointF[] 
		{
			new PointF(30, 10),
			new PointF(250, 10),
			new PointF(150, 250)
		});
	base.OnPaint(e);
}

  运行程序,如下图:

  然后我们这次在绘制三角形之前先设置剪辑区域,为了方便观察,给剪辑区域加上黑色边框,代码如下:

protected override void OnPaint(PaintEventArgs e)
{
	Graphics g = e.Graphics;
	Rectangle rect = new Rectangle(40, 50, 200, 200);
	
	g.DrawRectangle(Pens.Black, rect);
	g.SetClip(rect);
	
	g.FillPolygon(Brushes.Red,
		new PointF[] 
		{
			new PointF(30, 10),
			new PointF(250, 10),
			new PointF(150, 250)
		});
	base.OnPaint(e);
}


  运行程序,如下图: 

  对比两次的结果,可以发现,绘图的时候,只在剪辑区域内的部分才会显示出来,超出的部分,是不会显示的。同时,还可以看到,窗体默认的剪辑区域就是非客户区。


  该方法还有其他几个重载,可以自行尝试的“玩一玩”。



  事实上,剪辑区域就是每次重绘时被更新的地方,剪辑区域外不会被重绘更新。



    桌面软件定制、中小型网站建设、移动APP开发请添加QQ/微信:773347113。


上一篇:

下一篇: