=============================================================
标题:利用GradientFill函数实现颜色渐变效果
摘要:
备注:Windows CE + VS2005
日期:2010.4.27
姓名:朱铭雷
=============================================================
一块指定区域的颜色渐变效果,可以通过GradientFill函数来实现。该函数的原型如下:
BOOL GradientFill(
HDC hdc,
PTRIVERTEX pVertex,
ULONG nVertex,
PVOID pMesh,
ULONG nCount,
ULONG ulMode
);
hdc是设备上下文句柄。pVertex指向一个TRIVERTEX结构体数组。TRVERTIX结构体的成员描述了所要填充区域中的某个点的颜色。GradientFill函数会根据这些点的颜色来调节实际颜色渐变的效果。nVertex是TRIVERTEX结构体的个数。pMesh指向一个GRADIENT_RECT结构体数组,该结构体的成员用来指定TRIVERTEX结构体数组中的哪个元素用来作为填充区域左上角,哪个用来作为右下角。nCount是GRADIENT_RECT结构体的个数。ulMode用来指定填充模式,设置为GRADIENT_FILL_RECT_H表示从左到右填充,设置为GRADIENT_FILL_RECT_V表示从上到下填充。
TRVERTIX结构体的原型如下:
typedef struct _TRIVERTEX {
LONG x;
LONG y;
COLOR16 Red;
COLOR16 Green;
COLOR16 Blue;
COLOR16 Alpha;
} TRIVERTEX,*PTRIVERTEX,*LPTRIVERTEX;
GRADIENT_RECT结构体如下:
typedef struct _GRADIENT_RECT {
ULONG UpperLeft;
ULONG LowerRight;
}GRADIENT_RECT, *PGRADIENT_RECT;
下面是一段示例代码:
———————————————————————————————————————
TRIVERTEX vert[2];
GRADIENT_RECT gRect;
vert[0].x = 100;
vert[0].y = 100;
vert[0].Red = 0x0000;
vert[0].Green = 0x0000;
vert[0].Blue = 0xff00;
vert[0].Alpha = 0x0000;
vert[1].x = 500;
vert[1].y = 400;
vert[1].Red = 0x0000;
vert[1].Green = 0xff00;
vert[1].Blue = 0x0000;
vert[1].Alpha = 0x0000;
gRect.UpperLeft = 0;
gRect.LowerRight = 1;
GradientFill(hdc,vert,2,&gRect,1,GRADIENT_FILL_RECT_H);
———————————————————————————————————————
效果如下: