MFC绘图之线

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;










  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值