绘制颜色渐变矩形函数
填充效果如下:
其中falg指定渐变形式:
0:左右渐变。
1:上下渐变
3:中心到左右两边渐变
4:中心到上下渐变
5:中心到四周实现渐变
void_DrawRect(CDC *pDC,CRect rect,COLORREF
nShadowBeginColor,COLORREF
nShadowEndColor,int falg )
{
TRIVERTEX rcVertex[2];
rcVertex[0].x=rect.left;
rcVertex[0].y=rect.top;
rcVertex[0].Red=GetRValue(nShadowBeginColor)<<8;
rcVertex[0].Green=GetGValue(nShadowBeginColor)<<8;
rcVertex[0].Blue=GetBValue(nShadowBeginColor)<<8;
rcVertex[0].Alpha=0x0000;
rcVertex[1].x=rect.right;
rcVertex[1].y=rect.bottom;
rcVertex[1].Red=GetRValue(nShadowEndColor)<<8;
rcVertex[1].Green=GetGValue(nShadowEndColor)<<8;
rcVertex[1].Blue=GetBValue(nShadowEndColor)<<8;
rcVertex[1].Alpha=0;
GRADIENT_RECT rect1;
rect1.UpperLeft=0;
rect1.LowerRight=1;
if (falg==0)
handle_GradientFill( pDC->GetSafeHdc
(),rcVertex,2,&rect1,1,
GRADIENT_FILL_RECT_H);
if (falg==1)
handle_GradientFill( pDC->GetSafeHdc
(),rcVertex,2,&rect1,1,
GRADIENT_FILL_RECT_V );
if (falg==3)
{
/////// Email: [email protected]
rcVertex[0].x=rect.left;
rcVertex[0].y=rect.top;
rcVertex[0].Red=GetRValue(nShadowBeginColor)<<8;
rcVertex[0].Green=GetGValue(nShadowBeginColor)<<8;
rcVertex[0].Blue=GetBValue(nShadowBeginColor)<<8;
rcVertex[0].Alpha=0x0000;
rcVertex[1].x=rect.right-rect.Width()/2;
rcVertex[1].y=rect.bottom;
rcVertex[1].Red=GetRValue(nShadowEndColor)<<8;
rcVertex[1].Green=GetGValue(nShadowEndColor)<<8;
rcVertex[1].Blue=GetBValue(nShadowEndColor)<<8;
rcVertex[1].Alpha=0;
handle_GradientFill(pDC->GetSafeHdc
(),rcVertex,2,&rect1,1,
GRADIENT_FILL_RECT_H);
rcVertex[0].x=rect.left+rect.Width()/2-1;
rcVertex[0].y=rect.top;
rcVertex[0].Red=GetRValue(nShadowEndColor)<<8;
rcVertex[0].Green=GetGValue(nShadowEndColor)<<8;
rcVertex[0].Blue=GetBValue(nShadowEndColor)<<8;
rcVertex[0].Alpha=0x0000;
rcVertex[1].x=rect.right;
rcVertex[1].y=rect.bottom;
rcVertex[1].Red=GetRValue(nShadowBeginColor)<<8;
rcVertex[1].Green=GetGValue(nShadowBeginColor)<<8;
rcVertex[1].Blue=GetBValue(nShadowBeginColor)<<8;
rcVertex[1].Alpha=0;
handle_GradientFill( pDC->GetSafeHdc
(),rcVertex,2,&rect1,1,
GRADIENT_FILL_RECT_H);
}
if (falg==4)
{ /////// Email: [email protected]
rcVertex[0].x=rect.left;
rcVertex[0].y=rect.top;
rcVertex[0].Red=GetRValue(nShadowBeginColor)
<< 8;
rcVertex[0].Green=GetGValue(nShadowBeginColor)<<8;
rcVertex[0].Blue=GetBValue(nShadowBeginColor)<<8;
rcVertex[0].Alpha=0x0000;
rcVertex[1].x=rect.right;
rcVertex[1].y=rect.bottom-rect.Height()/2;
rcVertex[1].Red=GetRValue(nShadowEndColor)<<8;
rcVertex[1].Green=GetGValue(nShadowEndColor)<<8;
rcVertex[1].Blue=GetBValue(nShadowEndColor)<<8;
rcVertex[1].Alpha=0;
handle_GradientFill(pDC->GetSafeHdc
(),rcVertex,2,&rect1,1,
GRADIENT_FILL_RECT_V);
rcVertex[0].x=rect.left;
rcVertex[0].y=rect.top-1+rect.Height()/2;
rcVertex[0].Red=GetRValue(nShadowEndColor)<<8;
rcVertex[0].Green=GetGValue(nShadowEndColor)<<8;
rcVertex[0].Blue=GetBValue(nShadowEndColor)<<8;
rcVertex[0].Alpha=0x0000;
rcVertex[1].x=rect.right;
rcVertex[1].y=rect.bottom;
rcVertex[1].Red=GetRValue(nShadowBeginColor)<<8;
rcVertex[1].Green=GetGValue(nShadowBeginColor)<<8;
rcVertex[1].Blue=GetBValue(nShadowBeginColor)<<8;
rcVertex[1].Alpha=0;
handle_GradientFill( pDC->GetSafeHdc
(),rcVertex,2,&rect1,1,
GRADIENT_FILL_RECT_V);
}
if (falg==MIDDLE_TO_SIDE)
{
POINT p1,p2,p3,p4,p;
p1.x=rect.left;p1.y=rect.bottom;
p2.x=rect.right;p2.y=rect.bottom;
p3.x=rect.right;p3.y=rect.top;
p4.x=rect.left;p4.y=rect.top;
p=rect.CenterPoint();
_DrawTriangle (pDC,p1,p2,p,nShadowEndColor,nShadowEndColor,nShadowBeginColor);
DrawTriangle(pDC,p2,p3,p,nShadowEndColor,nShadowEndColor,nShadowBeginColor);
DrawTriangle(pDC,p3,p4,p,nShadowEndColor,nShadowEndColor,nShadowBeginColor);
DrawTriangle(pDC,p4,p1,p,nShadowEndColor,nShadowEndColor,nShadowBeginColor);
}
}