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
函数设置渐变色。