效果图:
步骤:
-
Step1:画上立体2的框架
-
Step2:进行渐变颜色填充
void CFirstMFCLineView::OnLogoClass2()
{
CBrush backBrush(RGB(255, 255, 255));
CRect rect1(100, 60, 350, 330);
m_pDC->GetClipBox(&rect1);
//画需要的区域
m_pDC->PatBlt(rect1.left, rect1.top, rect1.Width(), rect1.Height(), PATCOPY);
// TODO: 在此添加命令处理程序代码
CPen m_pen[20];
CBrush m_brush[15];
m_pen[0].CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
m_pen[1].CreatePen(PS_SOLID, 1, RGB(255, 255, 255));
m_brush[1].CreateSolidBrush(RGB(241, 147, 224));
m_brush[2].CreateSolidBrush(RGB(249, 100, 200));
m_brush[3].CreateSolidBrush(RGB(220, 144, 238));//1
m_brush[4].CreateSolidBrush(RGB(200, 113, 236));//2
m_brush[5].CreateSolidBrush(RGB(255, 255, 255));
m_brush[6].CreateSolidBrush(RGB(151, 76, 215));//3
m_pDC->SelectObject(m_pen[1]);
//6号多边形
m_pDC->SelectObject(m_brush[3]);
CPoint pt6[6] = { CPoint(975.5, 203.5),CPoint(1010,183.5) ,CPoint(1010,344),CPoint(900,409.5), CPoint(900, 353) ,CPoint(975.5,308.5) };
m_pDC->Polygon(pt6, 6);
gradient_fillcolor(1010, 183.5, 975.5, 362);
gradient_fillcolor(900, 409.5, 975.5, 308.5);
//2号多边形
m_pDC->SelectObject(m_brush[2]);
CPoint pt2[4] = { CPoint(788, 183.5),CPoint(824, 203.5) ,CPoint(824, 256),CPoint(788, 236) };
m_pDC->Polygon(pt2, 4);
gradient_fillcolor(788, 183.5, 824, 256);
//3号多边形
m_pDC->SelectObject(m_brush[3]);
CPoint pt3[4] = { CPoint(824, 203.5),CPoint(900, 162) ,CPoint(900, 217),CPoint(824, 256) };
m_pDC->Polygon(pt3, 4);
gradient_fillcolor(900, 162, 824, 256);
//1号多边形
m_pDC->SelectObject(m_brush[3]);
CPoint pt1[6] = { CPoint(788, 183.5),CPoint(900, 120) ,CPoint(1010, 183.5),CPoint(975.5, 203.5), CPoint(900, 162) ,CPoint(824, 203.5) };
m_pDC->Polygon(pt1, 6);
//8号多边形
CPoint pt8[4] = { CPoint(900, 463),CPoint(1010,402.5) ,CPoint(1010,458.5),CPoint(900,520) };
m_pDC->Polygon(pt8, 4);
gradient_fillcolor(1010, 402.5, 900, 520);
//4号多边形
m_pDC->SelectObject(m_brush[4]);
CPoint pt4[6] = { CPoint(900, 162),CPoint(975.5, 203.5) ,CPoint(975.5, 308.5),CPoint(941.5, 289.5), CPoint(941.5, 236) ,CPoint(900,217) };
m_pDC->Polygon(pt4, 6);
//5号多边形
m_pDC->SelectObject(m_brush[3]);
CPoint pt5[6] = { CPoint(824, 269),CPoint(900,315) ,CPoint(941.5, 289.5),CPoint(975.5, 308.5), CPoint(900, 353) ,CPoint(788,290.5) };
m_pDC->Polygon(pt5, 6);
//7号多边形
m_pDC->SelectObject(m_brush[4]);
CPoint pt7[8] = { CPoint(788,290.5),CPoint(900,353) ,CPoint(900,409.5),CPoint(822.5,362), CPoint(822.5,423.5) ,CPoint(900,463), CPoint(900,520) ,CPoint(788,455) };
m_pDC->Polygon(pt7, 8);
//9号多边形
m_pDC->SelectObject(m_brush[3]);
CPoint pt9[6] = { CPoint(822.5,423.5),CPoint(859,401.5) ,CPoint(900,421.5),CPoint(975.5,381), CPoint(1010,402.5) ,CPoint(900,463) };
m_pDC->Polygon(pt9, 6);
//10号多边形
m_pDC->SelectObject(m_brush[6]);
CPoint pt10[4] = { CPoint(822.5,362),CPoint(859,383) ,CPoint(859,401.5),CPoint(822.5,423.5) };
m_pDC->Polygon(pt10, 4);
m_pDC->SelectObject(m_pen[1]);
m_pDC->SelectObject(m_brush[5]);
CPoint clear1[3] = { CPoint(900,520),CPoint(1010,458.5) ,CPoint(1035,531) };
m_pDC->Polygon(clear1, 3);
CPoint clear2[5] = { CPoint(900,409.5),CPoint(900,421.5) ,CPoint(975.5,381),CPoint(1017,366),CPoint(1010,344) };
m_pDC->Polygon(clear2, 5);
CPoint clear3[3] = { CPoint(788,236),CPoint(824,256) ,CPoint(784,268) };
m_pDC->Polygon(clear3, 3);
CPoint clear4[3] = { CPoint(900, 217),CPoint(824, 256) ,CPoint(900,256) };
m_pDC->Polygon(clear4, 3);
CPoint clear5[3] = { CPoint(900, 315), CPoint(941.5, 289.5), CPoint(900, 280) };
m_pDC->Polygon(clear5, 3);
}
void CFirstMFCLineView::gradient_fillcolor(int x1, int y1, int x2, int y2)
{
//CRect m_rcClient;
//得到客户区域的填充矩形
//GetClientRect(&m_rcClient);
//int nWidth = m_rcClient.Width();
//int nHeight = m_rcClient.Height();
TRIVERTEX vert[4];
GRADIENT_RECT gRect;
//b972ff
vert[0].x = x1;
vert[0].y = y1;
vert[0].Red = 0xb900;
vert[0].Green = 0x7000;
vert[0].Blue = 0xff00;
vert[0].Alpha = 0x0000;
vert[1].x = x2;
vert[1].y = y2;
//f965c9
vert[1].Red = 0xf900;
vert[1].Green = 0x6500;
vert[1].Blue = 0xc900;
vert[1].Alpha = 0x0000;
gRect.UpperLeft = 0;
gRect.LowerRight = 1;
GradientFill(m_pDC->GetSafeHdc(), vert, 2, &gRect, 1, GRADIENT_FILL_RECT_H);
}