第一次发博客而且目前水平有限,就发个今天写的小函数吧,希望对新手有帮助!
void DrawBigRectGraph(CDC* pDC, CRect& rc){
const int splitHeigtSeg = 8;
const int splitWidthSeg = 5;
Graphics graphics(pDC->GetSafeHdc());
GraphicsPath path;
CPoint ptCurveSpt = CPoint(rc.TopLeft().x, rc.TopLeft().y+rc.Height()*7/splitHeigtSeg);
CPoint ptCurveEpt = CPoint(rc.TopLeft().x+rc.Width()*3/splitWidthSeg, rc.TopLeft().y+rc.Height()*6/splitHeigtSeg);
CPoint firstCtrlPt = CPoint(rc.TopLeft().x+rc.Width()/splitWidthSeg, rc.TopLeft().y+rc.Height());
CPoint secondCtrlPt = CPoint(rc.TopLeft().x+rc.Width()/splitWidthSeg, rc.TopLeft().y+rc.Height()*6/splitHeigtSeg);
graphics.SetSmoothingMode(Gdiplus::SmoothingModeHighQuality);//抗锯齿
path.AddLine(rc.TopLeft().x, rc.TopLeft().y, ptCurveSpt.x, ptCurveSpt.y);
path.AddBezier(ptCurveSpt.x, ptCurveSpt.y, firstCtrlPt.x, firstCtrlPt.y, secondCtrlPt.x, secondCtrlPt.y, ptCurveEpt.x, ptCurveEpt.y);
path.AddLine(ptCurveEpt.x, ptCurveEpt.y, rc.BottomRight().x, ptCurveEpt.y);
path.AddLine(rc.BottomRight().x, ptCurveEpt.y, rc.TopLeft().x + rc.Width(), rc.BottomRight().y-rc.Height());
path.AddLine(rc.TopLeft().x + rc.Width(), rc.BottomRight().y-rc.Height(), rc.TopLeft().x, rc.TopLeft().y);
LinearGradientBrush pathBrush(Rect(rc.TopLeft().x, rc.TopLeft().y, rc.Width(), rc.Height()), Color::Blue, Color::Red
, LinearGradientMode::LinearGradientModeVertical);
//graphics.FillPath(&pathBrush, &path);
graphics.FillRegion(&pathBrush, &Region(&path));
graphics.DrawPath(&Pen(Color::Black, 2), &path);//先填充后绘制路径效果比较明显
}