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

本文介绍了两种实用的绘图技巧:一种是用于绘制带有颜色渐变效果的三角形,另一种是绘制带有不同渐变模式的矩形。通过具体的代码示例展示了如何设置颜色和渐变方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 源程序下载

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

       }

      

}

填充效果如下:

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值