当前位置:C++技术网 > 资讯 > 线性渐变画刷的学习之多色渐变色彩的设置

线性渐变画刷的学习之多色渐变色彩的设置

更新时间:2015-11-27 23:25:15浏览次数:1+次

想比较双色渐变,多色渐变画刷就是多了一种色彩作为过渡。实现多色渐变的填充效果时,可以使用一种较为原始的方法来构造一个多色填充效果,不过这种方式比较麻烦,不容易做。GDI+封装了一个函数SetInterpolationColors。

Status SetInterpolationColors(
const Color* pressColors;
const REAL* blendPositions;
INT count;
)
pressColors:包含多种颜色的数组;
blendPositions:包含色彩合成位置的数组
count:参与渐变颜色的色彩总数。

打开VS2013,新建一个工程,同时在工程中引入代码,因为我们实现的是GDI+工程。需要加入的代码,如《线性渐变画刷的学习之双色渐变色彩的设置》里的代码一样。下面我们在线性渐变画刷的学习之双色渐变色彩的设置菜单项中线性渐变的子菜单项加一项子菜单项多色渐变。建立消息响应:

void CLinearGradientBrushView::OnMultibrushlineardemo()
{
	// TODO:  在此添加命令处理程序代码
	this->RedrawWindow();
	Graphics Multigraphics(this->m_hWnd);
	Color colors[] = {
		Color(255, 255, 0, 0),
		Color(255, 0, 255, 0),
		Color(255, 0, 0, 255)
	};
	REAL positions[] = {
		0.0f,
		0.3f,
		1.0f
	};
	LinearGradientBrush linGrBrush(
		Point(0, 0),
		Point(180, 0),
		Color(255, 0, 0, 0),
		Color(255, 255, 255, 255)
		);
	linGrBrush.SetInterpolationColors(colors, positions, 3);
	Multigraphics.FillRectangle(&linGrBrush, 0, 0, 180, 100);
//////////////////不用SetInterpolation函数实现多色渐变/////////////////
	LinearGradientBrush linGrBrush1(
		Point(0, 0),
		Point(60, 0),
		Color(255, 255, 0, 0),
		Color(255, 0, 255, 0)
		);
	Multigraphics.FillRectangle(&linGrBrush1, 0, 120, 160, 100);
	LinearGradientBrush linGrBrush2(
		Point(0, 0),
		Point(60, 0),
		Color(255, 0, 255, 0),
		Color(255, 0, 0, 255)
		);
	Multigraphics.FillRectangle(&linGrBrush2, 60, 120, 120, 100);
}

代码实现:


对于相关的GDI+知识,请在本网站搜作者145742784的文章,我写了很多关于GDI+的文章.