路径表明了一定的区间,应用程序使用路径来绘制形体的轮廓。填充形体内部以及创建剪切区域。路径可以有一个或多个图形组成,而每一个图形又可以由一系列直线或曲线组成,还可以是基本的几何形体。
GDI+中使用GraphicsPath类来描述路径。下面我们利用这个类简单的创建一个红五角。
因为是GDI+程序,我们需要加入一些代码,我在《线性渐变画刷的学习之多色渐变色彩的设置》里给了代码,在这里我不说了。创建一个单文档项目,在菜单项中新建菜单项“路径渐变画刷示例”在这个菜单项下面加入一个子菜单项构造红五角。建立该子菜单项的消息响应:
void CPathGradientBrshView::OnBrushpathdemo()
{
// TODO: 在此添加命令处理程序代码
Graphics graphics(this->m_hWnd);
Pen pen(Color::Black, 1);
SolidBrush pthGrBrush(Color::Red);
SolidBrush blackbrush(Color::Blue);
Point points[] = {
Point(75, 0), Point(100, 50),
Point(150, 50), Point(112, 75),
Point(150, 150), Point(75, 100),
Point(0, 150), Point(37, 75),
Point(0, 50), Point(50, 50),
Point(75, 0)
};
/////创建路径
GraphicsPath path;
/////在路径中加入直线
path.AddLines(points, 11);
/////填充路径
graphics.FillPath(&pthGrBrush, &path);
/////绘制边界
graphics.DrawLines(&pen, points, 11);
for (int i = 0; i < 10; i++)
{/////每个圆点的直径为10
graphics.FillEllipse(&blackbrush, points[i].X - 5, points[i].Y - 5, 10, 10);
}
}
GDI+使用PathGradientBrush表示路径渐变画刷。路径渐变画刷的定义用下面的3个构造函数来表示:
PathGradientBrush(GraphicsPath *path);
PathGradientBrush(Points* points,int count, WrapMode wrapmide);
PathGradientBrush(PointF* points,int count, WrapMode wrapmide);
path:由GraphicsPath类定义的路径。points:用数组形式表示的组成路径的各个端点的坐标
count:端点数。
wrapmode:渐变画刷在目标区域的排列方式。
接着就是AddLines函数。在这里我们先运行下这个程序:
我们注释掉AddLines函数。看看运行结果:
没错!这下连FillPath函数都没用了,那个这个函数是干嘛的呢?实际上AddLines就是告诉编译器将封闭起整个路径,并告诉你路径在哪里?以便你对后续绘制操作。如果没有他,接下来的填充函数都没有用!