BOOL Arc(
HDC hdc, // handle to device context
int nLeftRect, // x-coord of rectangle's upper-left corner
int nTopRect, // y-coord of rectangle's upper-left corner
int nRightRect, // x-coord of rectangle's lower-right corner
int nBottomRect, // y-coord of rectangle's lower-right corner
int nXStartArc, // x-coord of first radial ending point
int nYStartArc, // y-coord of first radial ending point
int nXEndArc, // x-coord of second radial ending point
int nYEndArc // y-coord of second radial ending point
测试结果图
HDC hdc, // handle to device context
int nLeftRect, // x-coord of rectangle's upper-left corner
int nTopRect, // y-coord of rectangle's upper-left corner
int nRightRect, // x-coord of rectangle's lower-right corner
int nBottomRect, // y-coord of rectangle's lower-right corner
int nXStartArc, // x-coord of first radial ending point
int nYStartArc, // y-coord of first radial ending point
int nXEndArc, // x-coord of second radial ending point
int nYEndArc // y-coord of second radial ending point
);
前四个参数表明了 外接矩形
后四个参数表明了弧线的起始位置,
起点是:矩形的中心点(xCenter,yCenter)和点(nXStartArc, nYStartArc) 做一条直线,该直线和椭圆交于一点,该点便是弧线的起点。
终点的计算类似。
弧线的方向默认是逆时针。
部分测试代码
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
Rectangle(hdc,91,291,309,109);
TextOut(hdc,200,200,TEXT("(200,200)"),lstrlen(TEXT("(200,200)")));
TextOut(hdc,350,50,TEXT("(300,50)"),lstrlen(TEXT("(300,50)")));
TextOut(hdc,350,350,TEXT("(350,350)"),lstrlen(TEXT("(350,350)")));
SelectObject(hdc,(HPEN)CreatePen(PS_SOLID,1,RGB(255,0,0)));
//画弧线的函数
Arc(hdc,91,291,309,109,
350,50,350,350);
SelectObject(hdc,(HPEN)CreatePen(PS_SOLID,1,RGB(0,0,255)));
MoveToEx(hdc,200,200,NULL);
LineTo(hdc,350,50);
MoveToEx(hdc,200,200,NULL);
LineTo(hdc,350,350);
EndPaint(hWnd, &ps);
break;
测试结果图
红色为弧线。
两个蓝色线段作用 : 截取 起点和终点
坐标(300,50)和(350,350)分别标明了弧线的起点和终点。
Arc与ArcTo的区别在于,Arc函数只是绘出给定的弧线,不会对画笔位置产生影响;而ArcTo函数在工作时将会从画笔原来所在点开始绘制一条直线到弧线的开始点,绘画弧线完成后还会将画笔移动到弧线的终点,从而对画笔位置造成影响。