还有,如何画B样条曲线。

解决方案 »

  1.   

    箭头自然要自己画了,不就是多几遍MoveTo,LineTo吗?你可以做个封装嘛。贝塞尔曲线,我就不详讲了,一般的图像处理书中都有。
      

  2.   

    先MoveTo,LineTo,
    然后FloodFill
    如: CClientDC dc(this);
    dc.MoveTo(47,40);
    dc.LineTo(50,25);
    dc.LineTo(53,40);
    dc.LineTo(47,40);
    dc.FloodFill(50,30,RGB(0,0,0));
    保管能解决!
    呵呵
      

  3.   

    b样条,我有源代码。[email protected]
      

  4.   

    画箭头:
    // 绘制X轴箭头
    dc.MoveTo(315,275);
    dc.LineTo(320,280);
    dc.LineTo(315,285);

    // 绘制Y轴箭头
    dc.MoveTo(10,10);
    dc.LineTo(5,15);
    dc.MoveTo(10,10);
    dc.LineTo(15,15);
      

  5.   

    这个问题也不是那么容易。
        要区分是否是用鼠标来画。
        如果用来画;
          先写一个函数;
              如:XDrawArrow(CDC * pDC,CPoint pt1,CPoint pt2)
              函数体为:
              void XDrawArrow(CDC * pDC,CPoint pt1,CPoint pt2)
              {
                   pDC.MoveTo(pt1);
                   pDC.LineTo(pt2);
                   ...
                   //计算箭头上的两个小线段与这条线的夹角
                   ...
               }
    之后调用这个函数就可以了。
      

  6.   

    "B";     CPen  pen(PS_SOLID,3,RGB(0,0,0));
         CPen* pb=pDC->SelectObject(&pen);
     int   x=10;
     int   y=10;
     int   height=200;
     int   width=100;
     POINT p1[]={x,y,x,y+height};
              POINT p2[]={x,y,x+width,y,x+width*2,y+y/2,x+width,y+height/2};
     POINT p3[]={x+width,y+height/2,x,y+height/2};
    POINT p4[4] ={x,y+height,x+width,y+height,x+width*2,y+height*16/17,x+width,y+height/2};
     pDC->Polyline(p1,2);
     pDC->PolyBezier(p2, 4);
     pDC->Polyline(p3,2);
              pDC->PolyBezier(p4, 4);
     pDC->SelectObject(pb);