如何画一跟带箭头的线?

解决方案 »

  1.   

    箭头得线得端点坐标通常都是通过角度算出来的。
    如果条件可以,你可以使用GDI+ ,里面已经封装了画带箭头直线得函数。
      

  2.   

    回复人: nustbobo(pipi) 
    先画一根直线,再从直线的一端画两根斜线:)呵呵,我也一直是这样画的:)
      

  3.   

    自己画,mfc里是没有这样的函数的
      

  4.   

    水平或向上的画完线后,再输入一出一个字符">","<","^"不就行了?呵呵
      

  5.   

    看看JTDraw例子 网上到处都有
      

  6.   

    我最近刚画了一个这种带箭头的线,真巧。
    我是在先画一条直线,然后获取直线的末端点坐标(m_End(x,y))画一个多边形(三角形),
    里面的填充颜色和直线的一样就行了。
    pDC->MoveTo(line.m_Start);
    pDC->LineTo(line.m_End);
    CPoint p1(line.m_End.x + line.m_nPenWidth * 2,line.m_End.y - line.m_nPenWidth* 5);
    CPoint p2(line.m_End.x - line.m_nPenWidth * 2,line.m_End.y - line.m_nPenWidth* 5);
    CPoint p2(line.m_End.x ,line.m_End.y);//直线向下
    CPoint pArray[3];
    pArray[0] = p1;
    pArray[1] = p2;
    pArray[0] = p3;
    pDC->Polygen(pArray);
      

  7.   

    我通常是画三条直线,,
    但是我觉得那样如果移动的话就不方便!
    不如自己定义一种格式,,类似于CPoint类一样!
    可以做成一个函数,,那样就好了!!
      

  8.   

    我构造一个函数,是在startPoint,endPoint间画一条带箭头的线段
    void CTry1View::DrawLine(POINT startPoint, POINT endPoint)
    {
    CClientDC dc(this);
    dc.MoveTo(startPoint);
    dc.LineTo(endPoint);         double PI = 3.1415926;
    double t=PI/4;    //箭头与直线夹角
    double l=0.2;     //箭头边长度占直线长度的百分比

    POINT arrowPoint; arrowPoint.x = (int)(l*((startPoint.x-endPoint.x)*cos(t)-(startPoint.y-endPoint.y)*sin(t))+endPoint.x);
    arrowPoint.y = (int)(l*((startPoint.x-endPoint.x)*sin(t)+(startPoint.y-endPoint.y)*cos(t))+endPoint.y);
    dc.MoveTo(endPoint);
    dc.LineTo(arrowPoint); arrowPoint.x = (int)(l*((startPoint.x-endPoint.x)*cos(-t)-(startPoint.y-endPoint.y)*sin(-t))+endPoint.x);
    arrowPoint.y = (int)(l*((startPoint.x-endPoint.x)*sin(-t)+(startPoint.y-endPoint.y)*cos(-t))+endPoint.y);
    dc.MoveTo(endPoint);
    dc.LineTo(arrowPoint);
    }