使用GDI绘制简单曲线

来源:互联网 发布:seo区综合查询 编辑:程序博客网 时间:2024/05/21 22:27

这里所说的简单曲线主要指的是:圆、椭圆、弧等。同画线一样,都可以通过调用CDC类成员函数来实现绘制工作。

1椭圆

绘制椭圆及圆的成员函数为Ellipse,函数声明如下:

BOOL Ellipse(int x1,int y1,int x2,int y2);

BOOL Ellipse(LPCRECT lpRect);

参数x1和y1指定了所绘制椭圆的边界矩形的左上角顶点坐标值,参数x2和y2指定了所绘制椭圆的边界矩形的右下角顶点坐标值。参数lpRect直接指定了所绘制椭圆的边界矩形区域。

圆作为椭圆的一种特殊情况而被绘制,就是当该椭圆的边界矩形为一个正方形时,圆就会被绘制了。

下面的代码添加到上面的OnDraw函数中便 可以实现分别以指定的圆心绘制椭圆和圆的功能

void CMyFontView::OnPaint() {CPaintDC dc(this); // 用于绘制的设备上下文// TODO: 在此处添加消息处理程序代码// 不要为绘制消息而调用 CWnd::OnPaint()RECT rc;GetClientRect(&rc);dc.SetViewportOrg(rc.right/4,rc.bottom/4);dc.Ellipse(-100,-50,100,50);dc.SetViewportOrg(rc.right*3/4,rc.bottom/4);dc.Ellipse(-100,-100,100,100);}

 


2弧线

绘制圆弧线的成员函数为Arc,函数声明如下:

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);

参数x1和y1,x2和y2分别表示边界矩形的左上角顶点和右下角顶点,参数x3和y3,x4和y4分别表示所绘制弧线的首末端点。参数lpRect指定了边界矩形,参数ptStart和ptEnd分别表示弧线的首末端点。绘制弧线的缺省方向为逆时针。

void CMyArcView::OnPaint() {CPaintDC dc(this); // 用于绘制的设备上下文// TODO: 在此处添加消息处理程序代码// 不要为绘制消息而调用 CWnd::OnPaint()//将屏幕中左下的矩形区域的中心设置为原点;RECT rc;GetClientRect(&rc);dc.SetViewportOrg(rc.right/4,rc.bottom/4);//绘制圆弧;圆弧半径为100dc.Arc(-100,-100,100,100,-100,0,100,0);}


3圆角矩形

圆角矩形和椭圆有机的结合在一起,即把矩形的4个角点椭圆化。如果把圆角矩形的4个圆角移凑到一起,就会拼成一个完整的椭圆。要绘制圆角矩形,可以使用RoundRect()函数,其声明

BOOL RoundRect(int x1,int y1,int x2,int y2,int x3,int y3)

BOOL RoundRect(LPRECT lpRect,POINT point);

参数x1和y1指定了矩形左上角点坐标,x2和y2指定了矩形右下角坐标,x3表示用来画圆角的椭圆的宽度,y3表示该椭圆的高度。

4扇形

椭圆弧及其始点和终点所对应的两条椭圆半径所围成的图形称为扇形。绘制扇形,可以使有Pie()函数,其声明如下:

BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);

BOOL Pie(LPCRECT lpRect,POINT ptStart,PONIT ptEnd);

其参数与Arc()函数一样的。

5多边形

绘制折线可以使用PolyLine()函数和PolyLineTo(),多边形可以说是由首尾相连的封闭折线所围成的图形,绘制多边形可以使用函数Polygon()其声明如下:

BOOL Polygon(LPPOINT lpPoints,int nCount);

参数lpPoints指向一个存放多边形顶点的矩阵。参数nCount记录多边形顶点个数。

下面的代码介绍了使用PolyLine()函数和PolyBezier()函数,以给定的控制顶点绘制贝齐尔曲线以及其控制多边形:

//将屏幕右下的矩形区域的中心设置为原点;RECT rc;GetClientRect(&rc);dc.SetViewportOrg(rc.right*3/4,rc.bottom*3/4);//给定控制顶点CPoint pt[7];pt[0].x=-150;pt[0].y=0;pt[1].x=-100;pt[1].y=-75;pt[2].x=-50;pt[2].y=-75;pt[3].x=0;pt[3].y=0;pt[4].x=50;pt[4].y=75;pt[5].x=100;pt[5].y=75;pt[6].x=150;pt[6].y=0;//绘制控制多边形;dc.Polyline(pt,7);//绘制控制多边形dc.PolyBezier(pt,7);