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

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

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

线性渐变画刷的作用是在对目标区域进行填充时,使用逐渐变化的色彩进行填充。线性渐变画刷的“渐变”体现为,色彩变化沿着指定角度的直线路径方向进行,线性渐变可以是双色渐变,也可以是多色渐变。

GDI+的LinearGradientBrush类定义了线性渐变画刷。其定义线性渐变画刷的方法有以下六种:

LinearGradientBrush(Point &point1,Point &point2,Color &color1,Color &color2);
LinearGradientBrush(PointF &point1,PointF &points,Color &color1,Color &color2);
LinearGradientBrush(Rect &rect,Color &color1,Color &color2,REAL angle,BOOL isAngleScalable);
LineargradientBrush(RectF &rect,Color &color1,Color &color2,REAL angle,BOOL isAngleScalable);
LinearGradientBrush(Rect &rect,Color &color1, Color &color2,LinearGradientBrushMode mode);
LinearGradientBrush(RectF &rect,Color &color1, Color &color2,LinearGradientBrushMode mode);
&color2,LinearGradientBrushMode mode);
color1,color2:起点,终点的色彩;
point1,point2:起点,终点的坐标;
rect:画刷的矩形定义区间;
isAngleScalable:画刷是否需要旋转;
Angle:渐变画刷的旋转角度,只有当参数isAngleScalable为真时,才有效。
LinearGradientBrush:渐变线的填充方向。
实例操作一个双色渐变画刷:

打开VS2013,创建一个单文档工程,这是一个GDI+程序,如果你的编译器是VC6.0的话,就需要引入GDI+包,可以和我联系,我这有。微软自VS08后,编译器自带GDI+开发包。

下面我们需要为GDI+程序做些准备手续:

在工程的stdafx.h头文件中,加入以下代码:

#include"gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib") //在工程属性中添加亦可
在工程的APP类的初始化函数中加入代码,同时在初始化函数外声明一个变量:
ULONG_PTR gdiplusToken;
上面是变量。下面就是代码:
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
在菜单中新建一个菜单项线性渐变,再在线性渐变下加入一个新子菜单项双色渐变。

为这个新子菜单项建立消息响应:

void CLinearGradientBrushView::OnBrushlineardemo1()
{
	// TODO:  在此添加命令处理程序代码
	this->RedrawWindow();
	Graphics graphics(this->m_hWnd);
	LinearGradientBrush linGrBrush(
		Point(0, 0),
		Point(40, 0),
		Color(255, 255, 0, 0),
		Color(255, 0, 0, 255));
	LinearGradientBrush linGrBrush2(
		Point(0, 0),
		Point(40, 40),
		Color(255, 255, 0, 0),
		Color(255, 0, 0, 255)
		);
	graphics.FillRectangle(&linGrBrush, 0, 0, 200, 200);
	graphics.FillRectangle(&linGrBrush2, 240, 0, 200, 200);
	Pen pen(Color::Gray, 1);
	for (int i = 0; i < 5; i++)
	{
		graphics.DrawRectangle(&pen, 240 + i * 40, i * 40, 40, 40);
	}
}
代码实现: