一些常规形几何形状的绘制和效果填充(二)

来源:互联网 发布:减肥吃什么知乎 编辑:程序博客网 时间:2024/06/10 21:18

 源程序下载

(续)         visualsan@yahoo.cn 

 

我封装了这两个函数,使它的使用更容易:

1.绘制颜色渐变三角形,P1, P2, P3为三角形三个点,cP1, cP2, cP3为三角形三点所指定的颜色。

void  DrawTriangle(CDC *pDC,POINT P1,POINT P2,POINT P3,

              COLORREF cP1,COLORREF cP2,COLORREF cP3)

{

       TRIVERTEX        vert [4] ;

       vert [0] .x       P1.x;

       vert [0] .y       P1.y;

       vert [0].Red=GetRValue(cP1)<<8;

       vert [0].Green=GetGValue(cP1)<<8;

       vert [0].Blue=GetBValue(cP1)<<8;

       vert [0] .Alpha   0;

      

       vert [1] .x       P2.x;

       vert [1] .y       P2.y;

       vert [1].Red=GetRValue(cP2)<<8;

       vert [1].Green=GetGValue(cP2)<<8;

       vert [1].Blue=GetBValue(cP2)<<8;

       vert [1] .Alpha   =  0;

      

       vert [2] .x      P3.x;

       vert [2] .y       P3.y;

       vert [2].Red=GetRValue(cP3)<<8;

       vert [2].Green=GetGValue(cP3)<<8;

       vert [2].Blue=GetBValue(cP3)<<8;

       vert [2] .Alpha   0;

      

       _GRADIENT_TRIANGLE  gTRi[1];

      

       gTRi[0].Vertex1   = 0;

       gTRi[0].Vertex2   = 1;

       gTRi[0].Vertex3   = 2;

       handle_GradientFill(pDC->GetSafeHdc(),vert,4,&gTRi,1,GRADIENT_FILL_TRIANGLE);

}

2.绘制矩形,颜色渐变,其中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)

       {

              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)

       {

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

       }

      

}

填充效果如下:

一些常规形几何形状的绘制和效果填充(二)

一些常规形几何形状的绘制和效果填充(二)

一些常规形几何形状的绘制和效果填充(二)

 

阅读全文
0 0