win32的api中,提供了一个标准的API用于绘制线性渐变色。该API为:GdiGradientFill

GdiGradientFill有6 个参数:

参数1:需要绘制的设备上下文的句柄(在哪一个屏幕上绘制)。https://blog.csdn.net/zxxSsdsd/article/details/17027491

参数2:线性渐变色的列表(从哪一个颜色渐变到哪一个颜色)。

参数3:参数2是一个数组,参数3表示参数2数组的长度。如果设置了两个渐变色,那么参数3就可以设置为2。

参数4:绘制渐变色的矩形区域。

参数5:参数4是一个数组,参数5表示参数4数组的长度。如果设置了两个矩形区域,那么参数5设置为2。一般情况下,该参数为1.也就是给一个矩形区域绘制渐变色。

参数6:渐变色的填充模式,一般是从左到右填充GRADIENT_FILL_RECT_H,或者从上到下填充GRADIENT_FILL_RECT_V

具体的绘制代码如下:

void DrawLinearGradient(HWND hwnd) {
	PAINTSTRUCT ps;
	HDC hdc = BeginPaint(hwnd, &ps);
	COLORREF color1 = 0xeeeeee;
	COLORREF color2 = 0x554466;
	RECT rect = { 0,0,300,100 };
	TRIVERTEX vert[2] =
	{
		{rect.left,rect.top, GetRValue(color1)<<8,GetGValue(color1) << 8,GetBValue(color1) << 8,0},
		{rect.right,rect.bottom, GetRValue(color2) << 8,GetGValue(color2) << 8,GetBValue(color2) << 8,0}
	};
	GRADIENT_RECT rc = { 0, 1 };
	//设备上下文 渐变色集合 
	auto result = GdiGradientFill(hdc, vert, 2, &rc, 1, GRADIENT_FILL_RECT_H);
	EndPaint(hwnd, &ps);
}

透明度绘制

绘制完渐变色之后,如果想设置渐变色,需要单独调用GdiAlphaBlend函数设置渐变色。