1、单条绘制普通直线
a)设置起点
CPoint MoveTo(int x,int y);
CPoint MoveTo(POINT point);
b)设置终点
BOOL LineTo(int x,int y);
BOOL LineTo(POINT point);
2、绘制圆弧
BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );
BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );
BOOL ArcTo( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );
BOOL ArcTo( LPCRECT lpRect, POINT ptStart, POINT ptEnd );
注:上图可以看出当前点位于坐标原点
BOOL AngleArc( int x, int y, int nRadius, float fStartAngle, float fSweepAngle );//通过角度绘制圆弧
注:图上看到当前位置点从原点在第一次使用AngleArc绘制后变成了大圆弧的终点,随后绘制的第二个圆弧,连接到第二个圆弧的起点
注意:ArcTo和AngleArc在绘制时都会进行点更新,都是从上一次绘制的终点作为默认起点开始绘制,如未进行过圆弧绘制则默认以原点作为起点。
int SetArcDirection( int nArcDirection );//设置圆弧绘制逆时针or顺时针
int GetArcDirection( ) const;//获取当前圆弧绘制是逆时针or顺时针
3、多段线的绘制
BOOL Polyline( LPPOINT lpPoints, int nCount );
BOOL PolyPolyline( const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount );
注:对比上一张图,发现中间断开,使用PolyPolyline绘制了两条多段线,每个由四个点组成lpPolyPoints是每条多段线点个数的数组,nCount 为多段线条数,注意要相互匹配
BOOL PolylineTo( const POINT* lpPoints, int nCount );//可以进行一条或多条直线绘制,且更新当前点位置到上一次曲线绘制终点
注:PolylineTo对当前点位置进行了更新,更新至上一次绘制的末端,注意中间向右斜着的线,就是从上一次终点绘制到新多段线的起点的
BOOL PolyDraw( const POINT* lpPoints, const BYTE* lpTypes, int nCount );//既可以绘多条曲线也可以绘制贝塞尔曲线,相当于MoveTo、
LineTo、PolyBezierTo的综合体个人认为其方便在于可以对每个点进行控制,每个点进行类型控制,但在绘制的点较多时,对应的lpTypes
数组也得一样的长度
注意:Polyline是单条多段线绘制,PolyPolyline可以进行多条多段线的绘制且之间可以断开。
4、贝赛尔曲线绘制
BOOL PolyBezier( const POINT* lpPoints, int nCount );
BOOL PolyBezierTo( const POINT* lpPoints, int nCount );
注意:两者区别在于后者会对当前点的位置进行更新,注意使用贝塞尔曲线是,后面的参数nCount值必须比3的倍数大1,这是因为贝塞尔曲线需要至少两个控制点,一个终点以及一个起点。
5、当前点的获取
CPoint GetCurrentPosition( ) const;