当前位置:C++技术网 > 资讯 > 填充路径之“小丑”示例

填充路径之“小丑”示例

更新时间:2015-12-03 21:22:49浏览次数:1+次

如果图形的起点与终点坐标相同,我们说该图形是封闭(closeFigure)的,否则我们说这个图形是开放(startFigure)的。

通常,如果在路径中添加如矩形,圆形之类的几何图形,对这种路径的填充就是使用指定的色彩在封闭区域之内进行填充操作。但是,如果在路径中添加的图形没有封闭,此时对于路径的填充将会有什么效果?代码实现咯:

新建单文档的GDI+工程,加入必要的GDI+的程序,在菜单中添加菜单项“路径填充”,并在其子菜单项下添加一个新的子菜单项“图形路径”,建立消息响应:

void CPathFillpathView::OnPathfillpath()
{
	// TODO:  在此添加命令处理程序代码
	Graphics graphics(this->m_hWnd);
	this->RedrawWindow();
	GraphicsPath path1;
	GraphicsPath path;
	Pen pen(Color(128, 0, 0, 255), 5);
	SolidBrush brush(Color(255, 255, 0, 0));
	/////添加三条直线:开放的图形
	path1.AddLine(10, 10, 10, 50);
	path1.AddLine(10, 50, 50, 50);
	path1.AddLine(50, 50, 50, 10);
	path1.StartFigure();
	/////添加一个闭合的图形
	RectF rect(110, 10, 40, 40);
	path1.AddRectangle(rect);
	/////绘制,填充路径
	graphics.DrawPath(&pen, &path1);
	graphics.FillPath(&brush, &path1);
	/////添加开放的弧线
	path.AddArc(0, 0, 150, 120, 30, 120);
	/////添加封闭的椭圆
	path.AddEllipse(50, 50, 50, 100);
	/////使用默认的填充方式填充路径
	graphics.FillPath(&brush, &path);
	graphics.DrawPath(&pen, &path);
}
代码实现图:

代码中构造了两个路径,在第一个路径,添加了两个大小一样的矩形,不过的第一个矩形,只有三条边,是开放。另一个路径同时包含椭圆和弧线的图形,对这两个路径的填充效果如上所示。
从上面效果图中,对开放图形的填充并未出现异常,填充的区域与对应的封闭图形一致。实际上,对开放区域进行填充,是没有任何意义,就好比把水灌进一个没有底的瓶子。DrawPath函数在填充路径时,首先判断这个路径是不是封闭的,如果没有封闭,DrawPath函数会对该路径进行封闭:在起点与终点之间加上直线以封闭区域,在性质上等同于CloseFigure函数操作。
解释一下AddEllipse 函数:

public:
void AddEllipse (
	int x, 
	int y, 
	int width, 
	int height
)
参数
x
定义椭圆的边框的左上角的 X 坐标。
y
定义椭圆的边框的左上角的 Y 坐标。
width
定义椭圆的边框的宽度。
height
定义椭圆的边框的高度。
AddArc 函数:
public:
void AddArc (
	int x, 
	int y, 
	int width, 
	int height, 
	float startAngle, 
	float sweepAngle
)
参数
x
矩形区域左上角的 X 坐标,该区域定义将要从中绘制弧线的椭圆。
y
矩形区域左上角的 Y 坐标,该区域定义将要从中绘制弧线的椭圆。
width
矩形区域的宽度,该区域定义将要从中绘制弧线的椭圆。
height
矩形区域的高度,该区域定义将要从中绘制弧线的椭圆。
startAngle
弧线的起始角度,以度为单位从 X 轴顺时针测量。
sweepAngle
startAngle 和弧线末尾之间的角度。
自己跑程序理解咯,程序需要你的理解,就像你的女朋友一样