求助,哪位大拿帮我完成下这旋转图形, 不能使用图片, 就用CDC类 完成 多谢啦图形

解决方案 »

  1.   

    硬画?这个不难吧?两个arc,5条直线,填充。如果你想让它转,计算下几个坐标即可。也可以用gdi+
      

  2.   

    #define M_PI 3.1415926
    CPoint ptOrgin(200,150);//中心点
    float iRadio1=50;//内圆半径
    float iRadio2=70;//外圆半径
    float angleV=30;//豁口角度
    float angleTrangle=30;//三角形跨越角度
    int iTriangleLen1=20;//三角形箭头外沿宽度
    int iRadio1Span=8;//三角形箭头半径位置调整,为了好看
    float angleStart1=90.0f-angleV;
    float angleEnd1=90.0f+angleV;
    float angleStart2=90.0f-angleV;
    float angleEnd2=90.0f+angleV;
    //////////////////////////////////////////////////////////////////////////
    CRect rt1(ptOrgin.x-iRadio1,ptOrgin.y-iRadio1,ptOrgin.x+iRadio1,ptOrgin.y+iRadio1);
    CPoint ptStart1(int(ptOrgin.x-iRadio1*cos(M_PI*angleStart1/180.0f)),
    int(ptOrgin.y-iRadio1*sin(M_PI*angleStart1/180.0f)));
    CPoint ptEnd1(int(ptOrgin.x-iRadio1*cos(M_PI*angleEnd1/180.0f)),
    int(ptOrgin.y-iRadio1*sin(M_PI*angleEnd1/180.0f)));
    dc.Arc(rt1,ptStart1,ptEnd1);
    //////////////////////////////////////////////////////////////////////////
    CRect rt2(ptOrgin.x-iRadio2,ptOrgin.y-iRadio2,ptOrgin.x+iRadio2,ptOrgin.y+iRadio2);
    CPoint ptStart2(int(ptOrgin.x-iRadio2*cos(M_PI*angleStart2/180.0f)),
    int(ptOrgin.y-iRadio2*sin(M_PI*angleStart2/180.0f)));
    CPoint ptEnd2(int(ptOrgin.x-iRadio2*cos(M_PI*angleEnd2/180.0f)),
    int(ptOrgin.y-iRadio2*sin(M_PI*angleEnd2/180.0f)));
    dc.Arc(rt2,ptStart2,ptEnd2);
    //////////////////////////////////////////////////////////////////////////
    dc.MoveTo(ptEnd1);
    dc.LineTo(ptEnd2);
    //////////////////////////////////////////////////////////////////////////
    float angleEnd3=angleStart1+angleTrangle;
    CPoint ptTriAngleP1(int(ptOrgin.x-(iRadio1-iTriangleLen1)*cos(M_PI*angleStart1/180.0f)),
    int(ptOrgin.y-(iRadio1-iTriangleLen1)*sin(M_PI*angleStart1/180.0f)));
    CPoint ptTriAngleP2(int(ptOrgin.x-(iRadio2+iTriangleLen1)*cos(M_PI*angleStart1/180.0f)),
    int(ptOrgin.y-(iRadio2+iTriangleLen1)*sin(M_PI*angleStart1/180.0f)));
    CPoint ptTriAngleP3(int(ptOrgin.x-((iRadio2+iRadio1)/2+iRadio1Span)*cos(M_PI*angleEnd3/180.0f)),
    int(ptOrgin.y-((iRadio2+iRadio1)/2+iRadio1Span)*sin(M_PI*angleEnd3/180.0f)));
    dc.MoveTo(ptStart1);
    dc.LineTo(ptTriAngleP1);
    dc.LineTo(ptTriAngleP3);
    dc.MoveTo(ptStart2);
    dc.LineTo(ptTriAngleP2);
    dc.LineTo(ptTriAngleP3);
    //////////////////////////////////////////////////////////////////////////
    CPoint ptFill(int(ptOrgin.x-(iRadio2+iRadio1)/2*cos(M_PI*angleStart1/180.0f)),
    int(ptOrgin.y-(iRadio2+iRadio1)/2*sin(M_PI*angleStart1/180.0f)));
    dc.FloodFill(ptFill.x,ptFill.y,RGB(0,0,0));
    //////////////////////////////////////////////////////////////////////////