图形(8)

2019-04-21 12:11

没有双击就直接单击―多边形裁剪‖的情况发生,设置了消息对话框进行 警告。 1.7 Visual C++中基本绘图函数

实际利用Visual C++中编制图形程序,可以利用上述算法自己动手编制基本图形程序,作为图形程序的基类,当然还可利用系统中已提供的图形基类。下面简单介绍Visual C++提供的常用绘制图形函数。 1.点

画点是最基本的绘图操作,在绘图中,画点是通过调用CDC::SetPixel()或CDC∷SetPixelV()函数来实现的,原型如:

(1)COLORREF SetPixel(int x, int y, COLORREF crColor); (2)COLORREF SetPixel(POINT point, COLORREF crColor); (3)BOOL SetPixelV(int x, int y, COLORREF crColor); (4)BOOL SetPixelV(POINT point, COLORREF crColor); 2.画笔

一般格式:Cpen( )∷Cpen(int nPenStyle, int nWidth, CORLORREF crColor); 各属性意义:nPenStyle设置画笔的式样,式样有:PS_SOLID(实线),PS_DASH(虚线)、PS_DASHDOT(点划线)、PS_DASHDOTDOT(双点划线)、PS_DOT(点线)、PS_NULL(空笔不画线);nWidth设置线的宽度,默认值为1(1个像素宽);crColor表示颜色,可用DWOR表示,也可用RGB(r, g, b)表示。 3.画刷

用于指定填充的特征,画刷创建的格式如下:

(1)CBrush∷CBrush(创建一个空的画刷对象),可用GreateSolidBrush(),Greateha- tchBrush(),GreatehatchBrushIndrect(),GreatePatternBrush(),GreateDIBPatternBrush()建立画刷。

(2)CBrush∷CBrush()建立单一颜色的画刷,用次画刷画出的图形内部将会填充指定颜色。 (3)CBrush∷CBrush(int nIndex, COLORREF crColor);构建名为hatch的画刷,特点为画出的多边形内部将填充nrColor指定的线条格式,nrColor有HS_BDIAGONAL(45°左下→右上的斜线)、HS_CROSS(垂直线和水平线)、HS_DIAGCROSS(45°左上→右下、左上→右下的相交斜线)、HS_HDLAGNAL(45°左上→右下的斜线)、HS_HORIZONAL(水平线)、HS_VERTICAL(垂直线)。

(4)CBrush∷CBrush(Cbitmap *pBitmap)中pBitmap指向Cbitmap对象的指针,这一位图对象包含用做画刷图案的位图,此位图必须为8×8大小,否则将对原位图进行裁剪。 创建画刷和画笔后,还要用CDC类选中画笔和画刷,用CPaintDC,CClientDC或CWindowDC来选中、绘图及撤销对象。

CClientDC对象代表客户程序区域的绘图画面只能在窗口的客户区域中画图。若需处理整个画面(包括客户程序区域和非客户程序区)设备上下文的调用和释放可用CWindowDC。 4.绘制直线函数

(1)MoveTo()函数用来设置当前的x,y的位置,创建的格式如下: CPoint MoveTo(int x, int y);

CPoint MoveTo(POINT point);

其中x,y用于定义新位置的坐标,point指定新位置,可为其传递一个POINT对象。 功能:将线的起点从当前位置移到新位置(x,y),并且只移动点不画线。 (2)LineTo()用于绘制起点坐标到终点直线,创建的格式如下: BOOL LineTo(int x, int y); BOOL LineTo(POINT point);

其中x,y用于定义线的终点坐标,point指定线段端点位置,可为其传递一个POINT结构或POINT对象。

功能:从当前的位置到新位置(x,y)画线(不包括此端点)。 5.椭圆函数 创建的格式如下:

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

说明:x1, y1为限定椭圆范围的矩形左上角坐标,x2, y2为限定椭圆范围的矩形右下角坐标。

LpRect指定椭圆的限定矩形,可为其传递一个CRect对象。 6.函数绘制一段椭圆弧Arc() 创建的格式如下:

BOOL Arc(int x1, int y1 , int x2, int y2, int x3, int y3 , int x4, int y4); BOOL Ellipse(LPCRECT lpRect);

x1, y1为限定椭圆弧范围的矩形左上角坐标;x2, y2为限定椭圆弧范围的矩形右下角坐标。x3, y3为起点坐标;x4, y4为终点坐标。 7.矩形函数 创建的格式如下:

BOOL Rectangle(int x1, int y1, int x2, int y2); x1, y1为矩形左上角坐标,x2, y2为矩形右下角坐标。 功能:使用当前画笔画一矩形。 8.连续画线函数 创建的格式如下:

(1)BOOL PolyLine(LPPOINT lpPoints , int nCount);

说明:lpPoints指向POINT结构数组,数组中每一个结构标识一个点的坐标。

nCount:为定义数组中的点数,使用当前画笔从第一个点开始经后续点连续画线直到最后一个点。

(2)BOOL PolyLineTo(LPPOINT *lpPoints , int nCount);

说明:lpPoints指向POINT结构数组指针,画一条或多条直线的指针,数组中存放直线顶点的坐标。

nCount:为定义数组中的点数。

(3)BOOL PolyBezier(LPPOINT *lpPoints);

说明:lpPoints指向POINT结构数组指针,画一条或多条直线的指针,数组中包括曲线的重点和控制点。

nCount:为定义数组中的点数。

绘制三次贝塞尔曲线需要两个控制点及一个终点及一个起点,共4个点决定一条贝塞尔曲线。

(4)BOOL PolyBezierTo(LPPOINT *lpPoints); 画一条或多条贝塞尔曲线。

lpPoints指向POINT结构数组指针,画一条或多条直线的指针,数组中包括曲线的重点和控制点。

9.多边形绘制函数 创建的格式如下:

(1)BOOL Polygon(counst POINT lpPoints, int nCount);

说明:lpPoint指定多边形顶点数组中每一点是一个POINT结构或一个CPoint对 象,nCount指定数组中顶点数。

(2)BOOL PolyPolygon(LPPOINT lpPoints,lpint lpPolyCounts, int lpPoints);

说明:lpPoint指向一个POINT结构或CPoint对象数组,每个数组定义一个多边形的顶点;lpPolyCounts指向一个整数数组,每个整数说明lpPoints数组中一个多边形的顶点数,nCount:为LpPolyCount数组中的项数,即指定要画的多边形数,最多为2。 10.填充函数 创建的格式如下:

(1)BOOL FillSolidRect(LPCRECT lpRect, COLORREF crColor); (2)BOOL FillSolidRect(int x, int y ,int cx, int cy, COLORREF Clr); 说明:LpRect指定矩形可传递一个指向RECT结构的指针或CRect对象。 Clr为填充颜色;x,y为矩形左下角坐标,cx为矩形宽,cy为矩形高。 (3)BOOL ExtFloodFill(int x, int y, COLORREF crColor,UINT nFillType);

说明:x,y为开始填充处坐标;crColor为填充颜色;FloodFillBorder指填充区域由crColor参数所指定颜色包围部分;FloodFillSurface表示填充区域是由nColor指定颜色来定义矩形填充。

(4)BOOL FloodFill(int x, int y ,COLORREF Clr);

说明:x, y 为填充处逻辑坐标或边界颜色,crColor指定填充颜色。 以上简单介绍了系统中提供的基本绘图函数,更多内容请参见其他参考书。 练 习 题

1.为什么说直线生成算法是二维图形生成技术的基础?

2.根据DDA算法编制绘制从(10, 10)到(300,400)直线的程序。 3.将中点画线算法推广以便能画出任意斜率的直线。 4.使用中点分割算法实现对直线段进行裁剪的程序。

5.利用本章所建程序框架,在菜单项―圆‖的子菜单中添加―直角坐标画圆‖子菜单,并添加相应命令和代码实现直角坐标画圆程序,加深对画圆算法的理解,并与其他算法程序相比较。

6.利用Visual C++已定义函数实现上述直线、圆、椭圆等图形的绘制,并进行区域填充。

满怀希望的 2009-09-24 22:52:19

函数功能:该函数将指定坐标处的像素设为指定的颜色。

函数原型:COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor); 参数:

hdc:设备环境句柄。

X:指定要设置的点的X轴坐标,按逻辑单位表示坐标。 Y:指定要设置的点的Y轴坐标,按逻辑单位表示坐标。 crColor:指定要用来绘制该点的颜色。

返回值:如果函数执行成功,那么返回值就是函数设置像素的RGB颜色值。这个值可能与crColor指定的颜我色有不同,之所以有时发生这种情况是因为没有找到对指定颜色进行真正匹配造成的;如果函数失败,那么返回值是C1。

Windows NT:若想获得更多的错误信息,请调用GetLastError函数。 备注:如果像素点坐标位于当前剪辑区之外,那么该函数执行失败。 不是所有设备都支持SetPixel函数。有关详情,请参考GetDeviceCaps。

速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h:库文件:gdi32.lib。 其它相关 Graphics.setPixel

Sets a pixel to the specified color. Syntax

public final void setPixel( Point pt )

public final void setPixel( Point pt, Color color )

public final void setPixel( Point pt, Color color, RasterOp op ) public final void setPixel( int x, int y )

public final void setPixel( int x, int y, Color color )

public final void setPixel( int x, int y, Color color, RasterOp op )


图形(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:二建建筑工程实务案例题重点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: