谢谢

解决方案 »

  1.   

    呵呵,好像没有直接的API哟! 可能要画一Polygon来实现.
      

  2.   

    moveto lineto
    也就几条线
      

  3.   

    //Draw Triangle
    double dAngle = 0.0;
    CPoint trigle[3];
    if(sqrt( (m_ptStart.x - m_ptEnd.x)*(m_ptStart.x - m_ptEnd.x) + (m_ptStart.y - m_ptEnd.y)*(m_ptStart.y - m_ptEnd.y) ) > 10)
    {
    double ptCenterx,ptCentery;
    ptCenterx = m_ptStart.x + double(m_ptEnd.x - m_ptStart.x)/2;
    ptCentery = m_ptStart.y + double(m_ptEnd.y - m_ptStart.y)/2;

    //求得三角形的三个顶点
    if((m_ptStart.x - m_ptEnd.x) == 0) //竖直
    {
    trigle[0].y = long(ptCentery + (m_ptStart.y > m_ptEnd.y ? -ARROWLENGTH*3 : ARROWLENGTH*3));//A
    trigle[0].x = long(ptCenterx);

    trigle[1].y = long(ptCentery);//B
    trigle[1].x = long(ptCenterx - ARROWLENGTH - 2);

    trigle[2].y = long(ptCentery);//C
    trigle[2].x = long(ptCenterx + ARROWLENGTH + 2);
    }
    else if((m_ptStart.y - m_ptEnd.y) == 0) //水平
    {
    trigle[0].x = long(ptCenterx + (m_ptStart.x > m_ptEnd.x ? -ARROWLENGTH*3 : ARROWLENGTH*3));//A
    trigle[0].y = long(ptCentery);

    trigle[1].x = long(ptCenterx);//B
    trigle[1].y = long(ptCentery - ARROWLENGTH*1.2);

    trigle[2].x = long(ptCenterx);//C
    trigle[2].y = long(ptCentery + ARROWLENGTH*1.2);
    }
    else //rotate
    {
    double trigle0x = 0.0,trigle0y = 0.0;
    double dTemp = 0.0;
    double ratio = 0.0;
    double b = 0.0;

    dAngle = double(m_ptStart.y - m_ptEnd.y) / double(m_ptStart.x - m_ptEnd.x);
    //斜率
    ratio = - 1 / dAngle; //第三象限和第一象限dAngle是正的
    if(m_ptStart.y > m_ptEnd.y && m_ptStart.x < m_ptEnd.x)
    dAngle = -dAngle;
    if(m_ptStart.y < m_ptEnd.y && m_ptStart.x > m_ptEnd.x)
    dAngle = -dAngle; if(m_ptStart.y > m_ptEnd.y) //起始点在下
    trigle0y = long(ptCentery - ARROWLENGTH*3*sin(atan(dAngle)));
    else //起始点在上
    trigle0y = long(ptCentery + ARROWLENGTH*3*sin(atan(dAngle))); if(m_ptStart.x > m_ptEnd.x) //起始点在右
    trigle0x = long(ptCenterx - ARROWLENGTH*3*cos(atan(dAngle)));
    else //起始点在左
    trigle0x = long(ptCenterx + ARROWLENGTH*3*cos(atan(dAngle)));

    trigle[0].x = long(trigle0x);
    trigle[0].y = long(trigle0y);
    b = ptCentery - ratio * ptCenterx;
    dTemp = ptCenterx - ARROWLENGTH*sin(atan(dAngle))*1.2;
    trigle[1].x = long(dTemp);
    trigle[1].y = long(ratio * dTemp + b); dTemp = ptCenterx + ARROWLENGTH*sin(atan(dAngle))*1.2;
    trigle[2].x = long(dTemp);
    trigle[2].y = long(ratio * dTemp + b);
    } CRgn rgnPointer;
    rgnPointer.CreatePolygonRgn(trigle,3,WINDING);
    CBrush pointKnob;
    if(m_hiton)
    pointKnob.CreateSolidBrush(m_colorSelect);
    else
    pointKnob.CreateSolidBrush(m_colorDefault);

    pMemDC->FillRgn(&rgnPointer, &pointKnob);
    pointKnob.DeleteObject();  
    rgnPointer.DeleteObject();
    }这是一条直线的中点处画箭头的代码 你参考一下 直线的两个点为ptStart和ptEnd