Visual C++图形程序设计实验.pdf
《Visual C++图形程序设计实验.pdf》由会员分享,可在线阅读,更多相关《Visual C++图形程序设计实验.pdf(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验实验 1 Visual C+图形程序设计 图形程序设计 一、实验目的一、实验目的 Visual C+是在 Microsoft C 的基础上发展而来的,随着计算机软、硬件技术的快速发展,如今 Visual C+已成为集编辑、编译、运行、调试于一体功能强大的集成编程环境。本章以Visual C+6.0 为对象,主要介绍 Visual C+集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础,目的是通过对 Visual C+的学习,掌握 Visual C+图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。二、实验任务 二、实验任务 1 学习 Vis
2、ual C+图形程序设计的方法;2 掌握 Visual C+集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程、橡皮筋交互技术、画刷与画笔以及菜单设计等;三、基础知识和实验步骤 三、基础知识和实验步骤 31 Visual C+6.0 应用程序开发方法应用程序开发方法 介绍 Visual C+6.0 集成开发环境,以一个简单的实例介绍利用 Visual C+应用程序工程建立方法和程序设计框架。311 Visual C+的集成开发环境的集成开发环境 从开始菜单中启动Visual C+6.0,进入开发集成环境。打开一个项目后,可以看到Visual C+6.0 的开发环境由标题栏、工具栏、工
3、作区窗口、源代码编辑窗口、输出窗口和状态栏组成,见图 3.1 所示。标题栏用于显示应用程序名和所打开的文件名,标题栏的颜色可以表明对应窗口是否被激活。菜单栏包括文件、编辑、显示、插入、工程、编译、工具、窗口和帮助九项主菜单,包含了从源代码的编辑、界面设计、程序调试和编译运行在内的所有功能。工具栏列出了常用的菜单命令功能和对象方法。工具栏的下面是两个窗口,一个是工作区窗口,用于列出工程中的各种对象,一个是源代码编辑窗口,用于各个对象的程序设计。输出窗口显示项目建立过程中所产生的各种信息。屏幕底端是状态栏,它给出当前操作或所选择命令的提示信息。-1标题栏 菜单栏 工作区 源代码 编辑窗 图 3.1
4、 Visual C+6.0 集成开发环境 312 应用程序工程的建立方法 312 应用程序工程的建立方法 Visual C+提供了一种称为 App Wizard 的工具,利用该工具,用户可以方便地按照自己的需要创建符合需要的应用程序框架。在这个基础上,用户可以进一步将自己编写的程序加入到这个框架中,实现用户程序的功能。下面介绍建立 VcApp 应用程序框架的方法,其它应用程序的方法都与此类似。第一步:启动 Visual C+,选择工程方法 从开始菜单中选择 Visual C+,进入 Visual C+集成环境。从文件菜单中选择新建(New)命令,弹出图 3-2 对话框。切换到工程(Projec
5、ts)标签,项目类型选择 MFC AppWizard(exe),输入工程的名字(如 VcApp),选择项目放置的位置,然后单击“确定”按钮。图 3-2 Visual C+的 New 对话框 口状态栏 -2第二步:设置应用程序的特性。这些设置包括六个问题,每一个问题都有不同的选项供选择。一个问题选择完后,通过“下一步”(Next)选择下一个问题,直到六个问题选择完毕。还可以通过“上一步”(Back)返回上一个问题重新选择。下面继续上面的例子,在单击“确定”按钮后,弹出第一个问题窗口,如图 3-3 所示。第一个问题是建立什么类型的应用程序,有三个选项:单个文档(Single document)、多
6、重文档(Multiple document)和基本对话(Dialog based)。单个文档应用程序主窗口中只有一个窗口,多重文档可以在主窗口中开多个子窗口,基本对话主窗口是一个对话框。例中选择单个文档,单击“确定”,进入下一个问题,如图 3-4 所示。第二个问题是数据库的支持,是否用 ODBC 存取数据库,有四个选项:不包括数据库的支持(None)、仅包含 ODBC 头文件(Header files only)、指定一个数据库但没有文件支持和指定一个数据库但需要文件支持。当选择了后两项,则需要用户选择一个已经建立的数据库。例中不需要数据库支持,选择第一个选项“否”,进入第三个问题,如图 3-
7、5 所示。图 3-3 第一个问题:选择应用程序的类型 图 3-4 第二个问题:选择是否要用 ODBC 支持 -3 第三个问题是对 ActiveX 的支持。有五个选项:(1)没有对 ActiveX 的支持;(2)ActiveX容器,它可以包含链接和嵌入对象。容器不能为其它的 ActiveX 程序提供支持,它只能维护嵌入对象;(3)微型服务器(Mini-server),应用程序不能独立运行,只能被调用为其它程序建立 ActiveX 对象。(4)完整服务器(Full-server),它能够独立运行,并能够为其它应用程序建立 ActiveX 对象。(5)容器和服务器,一个应用程序可以同时是容器和服务器
8、。在例子中,选择第一个选项,没有对 ActiveX 的支持,单击“下一个”(Next)进入下一个问题。图 3-5 第三个问题:选择是否对 ActiveX 的支持 第四个问题是应用程序的特性和高级选项,如图 3-6 所示。图 3-6 应用程序的特性和高级选项 例中全部采用默认选项,进入下一个问题。-4第五个问题是项目的风格、原文件注释和 MFC 库类型,如图 3-7 所示。在例子中全部采用默认选项,进入第六个问题。第六个问题是确定类名和文件名,如图 3-8 所示。基于第一个问题到第五个问题的回答,AppWizard 会把将要建立的新类的名称通知用户。AppWizard 将为应用程序建立四个新类,
9、CVcAppApp 是应用程序类,它是 CWinApp的派生类。CMainFrame 是一个拥有应用程序主窗口的类。CVcAppDoc 和 CVcAppView 是该应用程序的文档和视图类。这些名字用户可以改变。最后单击“完成”(Finish),显示所建项目的信息,单击“确定”后,项目建立完成。图 3-7 项目的风格、原文件注释和 MFC 库类型 图 3-8 通知 MFC 产生的类名称 313 输入源程序进行程序设计 313 输入源程序进行程序设计 应用程序项目工程建立以后,就为应用程序的开发建立了一个框架,这是不输入任何 -5程序代码,对该项目程序进行编译和运行,可以生成一个完整的窗口程序。
10、用户根据项目工程中的不同类,输入自己设计的程序代码,完成用户的程序设计。例如,从 VcApp Classes 中找到 CVcAppView 的 OnDraw()函数,如图 3-9 所示。双击OnDraw()函数,这时系统会打开 VcAppView.cpp 文件,而且光标正置于 OnDraw()函数中,在其中输入下列语句:pDc-TextOut(30,30,”同学们好,欢迎使用 VC+编程!”);编译并运行该程序,运行结果如图 3-10 所示。图 3-9 输入程序源代码 图 3-10 运行结果 -632 图形设备接口和图形程序设计 32 图形设备接口和图形程序设计 321 图形设备接口简介 32
11、1 图形设备接口简介 在 Windows 系统中,程序都是通过一个叫做图形设备接口(GDI,Graphics Device Interface)的抽象接口和硬件打交道,Windows 会自动将设备环境表映射到相应的物理设备,并且会提供正确的输入/输出指令。GDI 是 Windows 系统核心的三种动态链接库之一,它管理 Windows 系统的所有程序的图形输出。在 Windows 系统中,GDI 向程序员提供了高层次的绘图函数,只要掌握这些绘图函数,就可以很方便地进行图形程序设计。另一个概念是设备描述表(DC,Device Context)。DC 是一个数据结构,当程序向 GDI设备中绘图时,
12、需要访问该设备的 DC。MFC 将 GDI 的 DC 封装在 C+类中,包括 CDC 类和 CDC 派生类,这些类中的许多成员都是对本地 GDI 绘图函数进行简单封装而形成的内联函数。DC 的作用就是提供程序与物理设备或者虚拟设备之间的联系,除此之外,DC 还要处理绘图属性的设置,如文本的颜色等。程序员可以通过调用专门的 GDI 函数修改绘图属性,如 SetTextColor()函数。CDC 类是 GDI 封装在 MFC 中最大的一个类,它表示总的 DC。表 3.1 列出了 CDC 中的一些常用绘图函数。表 3.1 CDC 类中常用绘图函数 函 数 描 述 使用频率 Arc()椭圆弧*BitB
13、lt()把位图从一个 DC 拷贝到另一个 DC*Draw3dRect()绘制三维矩形*DrawDragRect()绘制用鼠标拖动的矩形*DrawEdge()绘制矩形的边缘*DrawIcon()绘制图标*Ellipse()绘制椭圆*FillRect()绘制用给定的画刷颜色填充矩形*FillRgn()绘制用给定的画刷颜色填充区域*FillSolidRed()绘制用给定的颜色填充矩形*FloodFill()用当前的画刷颜色填充区域*FrameRect()绘制矩形边界*FrameRgn()绘制区域边界*GetBKColor()获取背景颜色*GetCurrentBitmap()获取所选位图的指针*Get
14、CurrentBrush()获取所选画刷的指针*GetCurrentFont()获取所选字体的指针*GetCurrentPalette()获取所选调色板的指针*GetCurrentPen()获取所选画笔的指针*GetCurrentPosition()获取画笔的当前位置*GetDeviceCaps()获取显示设备能力的信息*-7GetMapMode()获取当前设置映射模式*Getpixel()获取给定像素的 RGB 颜色值*GetPolyFillMode()获取多边形填充模式*GetTextColor()获取文本颜色*GetTextExtent()获取文本的宽度和高度*GetTextMetric
15、s()获取当前文本的信息*GetWindow()获取 DC 窗口的指针*GrayString()绘制灰色文本*LineTo()绘制直线*MoveTo()设置当前画笔位置*Pie()绘制饼图*Polygon()绘制多边形*PolyLine()绘制一组直线*RealizePalette()将逻辑调色板映射到系统调色板*Rectangle()绘制矩形*RoundRect()绘制圆角矩形*SelectObject()选择 GDI 绘图对象*SelectPalette()选择逻辑调色板*SelectStockObject()选择预定义图形对象*SetBkColor()设置背景颜色*SetMapMode(
16、)设置映射模式*SetPixel()把像素设定为给定的颜色*SetTextColor()设置文本颜色*StretchBlt()把位图从一个 DC 拷贝到另一个 DC,并根据需要扩展或压缩位图*TextOut()绘制字符串文本*这些函数的语法和使用可以通过 MSDN 帮助查询。3.2.2 节主要介绍 Windows 中基本图形,包括电、直线、圆、圆弧、矩形、椭圆、扇形、折线等程序设计 322 绘制基本图形 322 绘制基本图形(1)画点)画点 SetPixel()函数可以在指定的坐标位置按指定的颜色画点。函数原型说明如下:COLORREF CDC:SetPixel(int X,int Y,COL
17、ORREF crColor);其中,(X,Y)为点的坐标位置,crColor 参数为点的颜色值。如果函数调用成功,则函数返回像素的颜色值,否则返回值为-1。颜色值通过 RGB(Red,Green,Blue)来设置,其中三个参数取值 0255。例如,在 VcAPP 项目中,在 CVcAppView 类中的 OnDraw()函数中加入下列画点语句:/绘制一组彩色点 /绘制一组彩色点 pDC-TextOut(20,20,point:);-8 pDC-SetPixel(100,20,RGB(255,0,0);pDC-SetPixel(110,20,RGB(0,255,0);pDC-SetPixel(1
18、20,20,RGB(0,0,255);pDC-SetPixel(100,20,RGB(255,255,0);pDC-SetPixel(100,20,RGB(255,0,255);pDC-SetPixel(100,20,RGB(0,255,255);pDC-SetPixel(100,20,RGB(0,0,0);pDC-SetPixel(100,20,RGB(255,255,255);运行程序,查看运行结果。(2)画直线和折线)画直线和折线 画直线需要 LineTo()和 MoveTo()两个函数的配合使用。LineTo()函数以当前位置所在的点为直线的起点,另指定一个点为直线的终点,画出一段直线
19、。直线的颜色通过画笔的颜色来设定,在后面介绍。LineTo()函数原型说明如下:直线的终点位置由(nXEnd,nYEnd)指定。如果函数调用成功,那么该点就成为当前位置,并返回 TRUE,否则返回 FALSE。MoveTo()函数只是将当前位置移动到指定位置,它并没有画出直线,其函数说明为:BOOL CDC:LineTo(int nXEnd,int nYEnd);BOOL CDC:MoveTo(int X,int Y);示例:在 CVcAppView 类中的 OnDraw()函数中加入下列画点语句:/绘制直线 pDC-TextOut(20,60,Line:);pDC-MoveTo(20,90)
20、;pDC-LineTo(160,90);Polyline()函数用来画一条折线,而 PolyPolyline()函数则用来画多条折线,它们的函数原型说明如下:DWORD cCount);BOOL CDC:PolyPolyline(COUST POINT*lppt,COUST DWORD*lpdwPolyPoints,BOOL CDC:Polyline(COUST POINT*lppt,int cPoints);在 Polyline()函数中,lppt 是指向折线顶点数组的指针,而 cPoints 是折线顶点数组中的顶点数。例如,绘制一条具有 4 个顶点的折线,程序如下:POINT polyli
21、nepoint4=70,240,20,190,70,190,20,240;pDC-Polyline(polylinepoint,4);在 PolyPolyline()函数中,lppt 是指向保存顶点数组的指针,而各条折线的顶点数则保存在 lpdwPolyPoints 参数所指向的数组中,最后的 cCount 参数指定折线的数目。例如:POINT polypolylinePt9=95,160,120,185,120,250,145,160,120,185,90,185,150,185,80,210,160,210;DWORD dwPolyPoints4=3,2,2,2;/分四段折线,分别占用 3
22、,2,2,2 个顶点 -9 pDC-PolyPolyline(polypolylinePt,dwPolyPoints,4);注:由于一条折线至少需要 2 个顶点,因此 dwPolyPoints 数组中的数不应该小于 2。(3)画弧线和曲线)画弧线和曲线 通过 Arc()函数画弧线或整个椭圆。椭圆限定在一个矩形内,称为外接矩形。Arc()函数的圆形说明如下:int nXStartArc,int nYStartArc,int nXEndArc,int nYEndArc);BOOL CDC:Arc(int nLeftRect,int nTopRect,int nRightRect,int nBott
23、omRect,其中,(nLeftRect,nTopRect)是外接矩形的左上角坐标值,(nRightRect,nBottomRect)是外接矩形的右下角坐标值。而椭圆中心与点(nXStartArc,nYStartArc)所构成的射线与椭圆的交点成为弧线的起点,椭圆中心与点(nXEndArc,nYEndArc)所构成的射线与椭圆的交点成为弧线的终点。椭圆上从始点到终点就形成一条弧线。在 Windows 系统中,弧线从始点到终点的方向是逆时针方向,但可以通过SetArcDirection()函数将绘制弧线方向设置为顺时针方向。示例,用 Arc()绘制圆、圆弧和椭圆,程序如下:for(i=0;iAr
24、c(260-5*i,70-5*i,260+5*I,70+5*i,260+5*i,70,260+5*i,70);for(i=3;iArc(260-10*i,70-10*i,260+10*i,70+10*i,(int)260+10*i*cos(60*3.1415926/180),(int)70+10*i*sin(60*3.1415926/180),(int)260+10*i*cos(60*3.1415926/180),(int)70-10*i*sin(60*3.1415926/180);pDC-Arc(260-10*i,70-10*i,260+10*i,70+10*i,(int)260-10*i*
25、cos(60*3.1415926/180),(int)70-10*i*sin(60*3.1415926/180),(int)260-10*i*cos(60*3.1415926/180),(int)70+10*i*sin(60*3.1415926/180);Bezier 曲线是最常见的非规则曲线之一。Bezier 曲线属于三次曲线,需要四个控制顶点来确定一条 Bezier 曲线,其中曲线通过第一点和最后一点,并且第一条边和最后一条边是曲线在起点和终点处的切线,从而确定了曲线的走向。PolyBezier()函数可以画出一条或多条 Bezier 曲线,其函数原型说明如下:BOOL CDC:PolyB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual C+图形程序设计实验 C+ 图形 程序设计 实验
限制150内