procedure AAABBB(canvas:TCanvas;Left,Top,Width,Height:integer);
var
  Right,Bottom:integer;begin
Right:=Left+width;
      Bottom:=Top+Height;      Canvas.Pen.Width:=1;
      Canvas.Pen.Color:=clwhite;      Canvas.MoveTo(Right,Top);
      Canvas.lineTo(Left,Top);      Canvas.LineTo(Left,bottom);      Canvas.Pen.Color:=clgray;      Canvas.lineTo(Right,Bottom);
      Canvas.lineTo(Right,Top);
end;//==================================
调用:    AAABBB(form1.Canvas,20,20,85,85);以上只能画一个矩形,我想画下面的形状,怎样画?
 _______ 
/       \
|       |
|       |
\_______/

解决方案 »

  1.   

    Canvas.RoundRect(20,20,100,200,50,50);
      

  2.   

    void DrawBezier(CDC *pDC, CPoint *pPoints, int nSegments)
    {
    pDC->MoveTo(pPoints[0]);
    fPoint fPointBezier;
    for(int i = 0; i < nSegments; i++)
    {
    BezierComputePoint(i / (float)nSegments, &fPointBezier, pPoints);
    pDC->LineTo(ROUND(fPointBezier.x), ROUND(fPointBezier.y));
    }
    pDC->LineTo(pPoints[3]);
    }void BezierComputePoint(float fU, fPoint* pDstPoint, CPoint* pSrcPoints)
    {
    //
    // Add up all the blending functions multiplied with the control points
    //
    float fBlend;
    float f1subu = 1.0f - fU; //
    // First blending function (1-u)^3
    //
    fBlend = f1subu * f1subu * f1subu;
    pDstPoint->x = fBlend * pSrcPoints[0].x;
    pDstPoint->y = fBlend * pSrcPoints[0].y; //
    // Second blending function 3u(1-u)^2
    //
    fBlend = 3 * fU * f1subu * f1subu;
    pDstPoint->x += fBlend * pSrcPoints[1].x;
    pDstPoint->y += fBlend * pSrcPoints[1].y; //
    // Third blending function 3u^2 * (1-u)
    //
    fBlend = 3 * fU * fU * f1subu;
    pDstPoint->x += fBlend * pSrcPoints[2].x;
    pDstPoint->y += fBlend * pSrcPoints[2].y; //
    // Fourth blending function u^3
    //
    fBlend = fU * fU * fU;
    pDstPoint->x += fBlend * pSrcPoints[3].x;
    pDstPoint->y += fBlend * pSrcPoints[3].y;
    }void DrawBeziers(CDC* pDC, CPoint *pPoints, int nPoints, int nSegments)
    {
    VERIFY(pPoints != NULL);
    ASSERT(nSegments > 0);

    for(int i = 0; i + 4 <= nPoints; i += 3)
    {
    DrawBezier(pDC, &pPoints[i], nSegments);
    }
    }