以下代码段已通过编译,但在运行时总是调用失败,无法画出曲线???!!!第一次使用PolyDraw函数,请帮忙看看是哪出了问题???POINT labelPoints[10];
BYTE types[10];
... // 起始线段端点
labelPoints[0].x = psm.labelStart.x; + offset;
labelPoints[0].y = psm.labelStart.y + labelHeight;
types[0] = PT_MOVETO; leftCornerArcCenter.x = labelPoints[0].x + labelBottomExtend + psm.labelCornerArcRadii;
leftCornerArcCenter.y = labelPoints[0].y - labelHeight + psm.labelCornerArcRadii;
rightCornerArcCenter.x = leftCornerArcCenter.x + (labelTopWidth - psm.labelCornerArcRadii * 2);
rightCornerArcCenter.y = leftCornerArcCenter.y; x = labelHeight - psm.labelCornerArcRadii;
y = labelBottomExtend + psm.labelCornerArcRadii;
z = ::sqrt((x * x) + (y * y));
a = ::acos(x / z);
b = ::acos(psm.labelCornerArcRadii / z);
c = pi - a - b;
x = ::sin(c) * psm.labelCornerArcRadii + 0.5;
y = ::cos(c) * psm.labelCornerArcRadii + 0.5; // 线段端点
labelPoints[1].x = leftCornerArcCenter.x - x;
labelPoints[1].y = leftCornerArcCenter.y - y;
types[1] = PT_LINETO; // 控制端点
labelPoints[2].x = labelPoints[1].x + 
labelBottomExtend * (psm.labelCornerArcRadii - y) / (labelHeight - (psm.labelCornerArcRadii - y));
labelPoints[2].y = psm.labelStart.y;
types[2] = PT_BEZIERTO;
labelPoints[3].x = labelPoints[0].x;
labelPoints[3].y = labelPoints[0].y;
types[3] = PT_BEZIERTO; // 控制端点型线段端点
labelPoints[4].x = leftCornerArcCenter.x;
labelPoints[4].y = leftCornerArcCenter.y - psm.labelCornerArcRadii;
types[4] = PT_BEZIERTO; // 线段端点
labelPoints[5].x = rightCornerArcCenter.x;
labelPoints[5].y = labelPoints[4].y;
types[5] = PT_LINETO; // 控制端点
labelPoints[6].x = labelPoints[5].x + psm.labelCornerArcRadii;
labelPoints[6].y = psm.labelStart.y;
types[6] = PT_BEZIERTO;
labelPoints[7].x = labelPoints[6].x;
labelPoints[7].y = labelPoints[6].y;
types[7] = PT_BEZIERTO; // 控制端点型线段端点 
labelPoints[8].x = rightCornerArcCenter.x + psm.labelCornerArcRadii;
labelPoints[8].y = rightCornerArcCenter.y;
types[8] = PT_BEZIERTO; // 闭合线段端点
labelPoints[9].x = labelPoints[8].x;
labelPoints[9].y = labelPoints[0].y;
types[9] = PT_CLOSEFIGURE; if(!pDC->PolyDraw(labelPoints, types, 10))MessageBox(_T("调用失败1"));

解决方案 »

  1.   

    代码所在的函数没问题,也不是坐标超出显示范围的问题。
    我在这里用其他的GDI函数都可以正常绘图,比如MoveTo,LineTo,Arc,Polygon,PolyBezier等都没问题,惟独就PolyDraw有问题。
      

  2.   

    PolyDraw根本就没有绘图。if(!pDC->PolyDraw(labelPoints, types, 10))MessageBox(_T("调用失败1"));总是返回"调用失败1"的消息。怎么会这样???
      

  3.   

    ms最后一个点的类型不对,搂住再查查msdn
      

  4.   

    呵呵,PT_CLOSEFIGURE 恐怕不能单独使用吧 :)