基于线条的、封闭的图形需要画笔来表现,封闭的形状的典型的特点在于它可以用图形、颜色或模式来填充。
画刷是具有颜色,图形或模式的对象,它用来填充图形内部,这种定义也意味着根据不同的目的有不同的画刷。为了满足这一目标,.NET框架在不同的名字空间中使用不同的类来支持画刷。所有画刷的基类是Brush类,它定义在System::Drawing名字空间中。
一、使用画刷
因为画刷的主要工作是填充封闭的图形,Graphics类为每一中图形都提供了一个填充方法。这些方法是:
·FillRectangle: 填充一个矩形或一个正方形; ·FillRectangle: 填充一系列的矩形; ·FillEllipse: 填充椭圆或圆 ·FillPolygon: 填充多边形 ·FillPie: 填充饼图 ·FillPath:填充图形路径
为了填写一个图形,调用上述的一个方法,给它传递一个刷子值,然后是图形的位置和尺寸,例如,如果想绘制一个矩形并用一个画刷来填充它,可以使用与下面相似的代码:
private: System::Void Form1_Paint(System::Object * sender,PaintEventArgs * e) { e->Graphics->FillRectangle(SomeBrush, 20, 20, 200, 160); } | 总共有四种画刷。
(一)实心画刷
最简单的画刷就是实心的,这种画刷只提供了一种颜色,习惯于用它来填充一个区域。为了获得实心画刷,可以使用System.Drawing 名字空间中的SolidBrush类。它只有一个构造函数,语法如下:
| public: SolidBrush(Color color); | color参数必须是有效定义的颜色值,这里是一个例子:
private: System::Void Form1_Paint(System::Object * sender, System::Windows::Forms::PaintEventArgs * e) { SolidBrush *brushBlue = new SolidBrush(Color::Blue); e->Graphics->FillRectangle(brushBlue, 20, 20, 200, 160); } |
 图一、代码运行效果图 | 如果想用不同的颜色填充不同的图形,不必为每一个图形创建一个新的画刷,任何时候,在对一个已经定义的画刷进行重用之前,只需要简单地更改颜色,正式基于这个原因,SolidBrush类提供了颜色属性,例子代码如下:
private: System::Void Form1_Paint(System::Object * sender, System::Windows::Forms::PaintEventArgs * e) { SolidBrush *colorizer = new SolidBrush(Color::Lime); e->Graphics->FillRectangle(colorizer, 10, 10, 120, 120); colorizer->Color = Color::Salmon; e->Graphics->FillRectangle(colorizer, 140, 10, 120, 120);
colorizer->Color = Color::Aqua; e->Graphics->FillRectangle(colorizer, 10, 140, 120, 120);
colorizer->Color = Color::Navy; e->Graphics->FillRectangle(colorizer, 140, 140, 120, 120); } |
 图二、代码运行效果图 | 与在图形编程中使用的绝大部分对象一样,画刷消耗计算机的资源,所以,使用过它以后,需要调用 Dispose()方法来释放它使用的资源。例子代码如下:
private: System::Void Form1_Paint(System::Object * sender, System::Windows::Forms::PaintEventArgs * e) { SolidBrush *colorizer = new SolidBrush(Color::Lime); e->Graphics->FillRectangle(colorizer, 10, 10, 120, 120);
colorizer->Color = Color::Salmon; e->Graphics->FillRectangle(colorizer, 140, 10, 120, 120);
colorizer->Color = Color::Aqua; e->Graphics->FillRectangle(colorizer, 10, 140, 120, 120);
colorizer->Color = Color::Navy; e->Graphics->FillRectangle(colorizer, 140, 140, 120, 120);
colorizer.Dispose(); } |
|
|