绘制颜色渐变矩形函数

来源:互联网 发布:经传软件ipad版 编辑:程序博客网 时间:2024/05/17 05:50

填充效果如下:

绘制颜色渐变矩形函数

绘制颜色渐变矩形函数

   其中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: visualsan@yahoo.cn 

              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: visualsan@yahoo.cn 

              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);

       }

      

}