更新时间:2015-11-29 15:39:04浏览次数:1+次
写GDI+程序,你需要加一些代码,我在之前的很多文章都写了,你去了解下。新建单文档工程,在菜单中加一个菜单项,并在新
加的菜单项下,新增一个子菜单项。看图:
为子菜单项“更改路径画刷中点”建立消息响应,在其中写入代码:
void CPathBrushCenterView::OnBrushpathcenterpoint()
{
// TODO: 在此添加命令处理程序代码
Graphics graphics(this->m_hWnd);
this->RedrawWindow();
/////构造一个圆形区域
GraphicsPath path;
path.AddEllipse(0, 0, 200, 200);
SolidBrush brush(Color(155, 255, 0, 0));
/////构造一个圆形路径渐变画刷
PathGradientBrush pthGrBrush(&path);
/////设置中心点色彩
pthGrBrush.SetCenterColor((Color(155, 255, 255, 255)));
Color colors[] = {
Color(55, 0, 0, 255)//////第一个参数可以理解为颜色对比度
};
INT count = 1;
/////设置边缘色
pthGrBrush.SetSurroundColors(colors, &count);
/////填充区域,使用单色画刷
graphics.FillEllipse(&pthGrBrush, 0, 0, 200, 200);
Point CenterPoint;
pthGrBrush.GetCenterPoint(&CenterPoint);
////////更该画刷的中心点,沿圆周的上半部分平移
for (int i = 0; i < 200; i++)
{
CenterPoint.X = i;
CenterPoint.Y = 10;
pthGrBrush.SetCenterPoint(CenterPoint);
graphics.FillEllipse(&pthGrBrush, 0, 0, 200, 200);
//////标记当前中心点
graphics.FillEllipse(&brush, CenterPoint.X, CenterPoint.Y, 5, 5);
//Sleep(1000);
}
/////更改画刷的中心点,沿圆周的下半部分平移
for (int i = 200; i>0; i--)
{
CenterPoint.X = i;
CenterPoint.Y = 190;
pthGrBrush.SetCenterPoint(CenterPoint);
graphics.FillEllipse(&pthGrBrush, 0, 0, 200, 200);
graphics.FillEllipse(&brush, CenterPoint.X, CenterPoint.Y, 5, 5);
//Sleep(1000);
}
}
代码实现图:
最后一张是最终代码实现图。
你取消掉sleep的注释。你就会看到有”手电筒“般的效果。
使用默认的画刷中心点时,白色圆环位于蓝色圆圈的中央;当中心点的位置变动后,白色圆环也随之移动,从而产生一种光照效果。同时,上述代码在对中心点的位置进行更改时,也示意了中心点位于路径之外时画刷的填充效果。渐变画刷的色彩渐变原理是,中心点距离渐变区域越近,中心点色彩在渐变区域中的部分越多,反之越少。更改渐变路径的中心点位置对渐变画刷填充效果的影响仅仅体现在中心点色彩在整个渐变区域的分布比例。这就是”手电筒“效果的原理。你好好跑一遍程序,理解下,就很简单。
相关资讯