更新时间:2015-11-28 22:10:32浏览次数:1+次
只见创建一个单文档工程,GDI+的必要代码我就不说了,你可以在《路径渐变画刷初接触》中找到。在菜单中新建一个菜单项,
并在该菜单项中引入一个子菜单项,建立消息响应(有不懂的地方,请联系我):
void CPathGradientBrshView::OnBrushpathstart()
{
// TODO: 在此添加命令处理程序代码
Graphics graphics(this->m_hWnd);
Pen pen(Color::Black, 1);
/////定义五星的边线坐标
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),
};
GraphicsPath path;
path.AddLines(points, 10);
/////构造路径渐变画刷
PathGradientBrush pthGrBrush(&path);
/////设置中心点色彩(起点色彩)
pthGrBrush.SetCenterColor(Color(255, 255, 0, 0));
/////设置每个端点的色彩(终点色彩)
Color colors[] = {
Color(255, 0, 0, 0), Color(255, 0, 255, 0),
Color(255, 0, 0, 255), Color(255, 255, 255, 255),
Color(255, 0, 0, 0), Color(255, 0, 255, 0),
Color(255, 0, 0, 255), Color(255, 255, 255, 255),
Color(255, 0, 0, 0), Color(255, 0, 255, 0)
};
int count = 10;
/////将端点的色彩应用在边界上
pthGrBrush.SetSurroundColors(colors, &count);
graphics.FillPath(&pthGrBrush, &path);
//srand((unsigned)time(NULL));
for (int z = 0; z < 3; z++)
{
colors[z] = RGB(rand() % 255, rand() % 155, rand() % 55);
graphics.TranslateTransform(200, 0);
pthGrBrush.SetCenterColor(Color(rand() % 255, rand() % 255, rand() % 255));
pthGrBrush.SetSurroundColors(colors, &count);
graphics.FillPath(&pthGrBrush, &path);
}
}
代码实现:
在这里尤其注意SetSurroundColors函数,我们注释掉它(第一个SetSurroundColors函数)。代码运行:
相比较之前的图片,你发现了没有,没有了边框色,而且,色彩单一(看第一张图片)!这个函数就是结合SetCenterColor函数来实现路径填充,回想路径渐变画刷填充原理---路径渐变画刷的渐变方向是从路径中央到路径边缘,是一种呈发散状的渐变。画刷的渐变方向反映出颜色的变化,而颜色的变化就是上面两个函数运行的结果。
对于后面三个五角星,你多次点击路径渐变示例下的子菜单项,就会有不同的颜色显示。这是因为rand()函数随机生成不同的颜色。诺:
相关资讯