VC++图形程序设计基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章VisualC++图形程序开发方法内容提要VisualC++是在MicrosoftC的基础上发展而来的,随着计算机软、硬件技术的快速发展,如今VisualC++已成为集编辑、编译、运行、调试于一体功能强大的集成编程环境。本章以VisualC++6.0为对象,主要介绍VisualC++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础,目的是通过对VisualC++的学习,掌握VisualC++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。2.1VisualC++6.0应用程序开发方法介绍VisualC++6.0集成开发环境,以一个简单的实例介绍利用VisualC++应用程序工程建立方法和程序设计框架。2.1.1VisualC++的集成开发环境从开始菜单中启动VisualC++6.0,进入开发集成环境。打开一个项目后,可以看到VisualC++6.0的开发环境由标题栏、工具栏、工作区窗口、源代码编辑窗口、输出窗口和状态栏组成,见图2.1所示。图2.1VisualC++6.0集成开发环境标题栏菜单栏工作区源代码编辑窗口状态栏标题栏用于显示应用程序名和所打开的文件名,标题栏的颜色可以表明对应窗口是否被激活。菜单栏包括文件、编辑、显示、插入、工程、编译、工具、窗口和帮助九项主菜单,包含了从源代码的编辑、界面设计、程序调试和编译运行在内的所有功能。工具栏列出了常用的菜单命令功能和对象方法。工具栏的下面是两个窗口,一个是工作区窗口,用于列出工程中的各种对象,一个是源代码编辑窗口,用于各个对象的程序设计。输出窗口显示项目建立过程中所产生的各种信息。屏幕底端是状态栏,它给出当前操作或所选择命令的提示信息。2.1.2应用程序工程的建立方法VisualC++提供了一种称为AppWizard的工具,利用该工具,用户可以方便地按照自己的需要创建符合需要的应用程序框架。在这个基础上,用户可以进一步将自己编写的程序加入到这个框架中,实现用户程序的功能。下面介绍建立VcApp应用程序框架的方法,其它应用程序的方法都与此类似。第一步:启动VisualC++,选择工程方法从开始菜单中选择VisualC++,进入VisualC++集成环境。从文件菜单中选择新建(New)命令,2.1.2应用程序工程的建立方法弹出图2-2对话框。切换到工程(Projects)标签,项目类型选择MFCAppWizard(exe),输入工程的名字(如VcApp),选择项目放置的位置,然后单击“确定”按钮。图2-2VisualC++的New对话框2.1.2应用程序工程的建立方法第二步:设置应用程序的特性。这些设置包括六个问题,每一个问题都有不同的选项供选择。一个问题选择完后,通过“下一步”(Next)选择下一个问题,直到六个问题选择完毕。还可以通过“上一步”(Back)返回上一个问题重新选择。下面继续上面的例子,在单击“确定”按钮后,弹出第一个问题窗口,如图2-3所示。第一个问题是建立什么类型的应用程序,有三个选项:单个文档(Singledocument)、多重文档(Multipledocument)和基本对话(Dialogbased)。2.1.2应用程序工程的建立方法单个文档应用程序主窗口中只有一个窗口,多重文档可以在主窗口中开多个子窗口,基本对话主窗口是一个对话框。例中选择单个文档,单击“确定”,进入下一个问题,如图2-4所示。第二个问题是数据库的支持,是否用ODBC存取数据库,有四个选项:不包括数据库的支持(None)、仅包含ODBC头文件(Headerfilesonly)、指定一个数据库但没有文件支持和指定一个数据库但需要文件支持。当选择了后两项,则需要用户选择一个已经建立的数据库。例中不需要数据库支持,选择第一个选项“否”,进入第三个问题,如图2-5所示图2-3第一个问题:选择应用程序的类型图2-4第二个问题:选择是否要用ODBC支持第三个问题是对ActiveX的支持。有五个选项:(1)没有对ActiveX的支持;(2)ActiveX容器,它可以包含链接和嵌入对象。容器不能为其它的ActiveX程序提供支持,它只能维护嵌入对象;(3)微型服务器(Mini-server),应用程序不能独立运行,只能被调用为其它程序建立ActiveX对象。(4)完整服务器(Full-server),它能够独立运行,并能够为其它应用程序建立ActiveX对象。(5)容器和服务器,一个应用程序可以同时是容器和服务器。在例子中,选择第一个选项,没有对ActiveX的支持,单击“下一个”(Next)进入下一个问题。图2-5第三个问题:选择是否对ActiveX的支持第四个问题是应用程序的特性和高级选项,如下图图2-6应用程序的特性和高级选项例中全部采用默认选项,进入下一个问题。第五个问题是项目的风格、原文件注释和MFC库类型,如图2-7所示。在例子中全部采用默认选项,进入第六个问题。第六个问题是确定类名和文件名,如图2-8所示。基于第一个问题到第五个问题的回答,AppWizard会把将要建立的新类的名称通知用户。AppWizard将为应用程序建立四个新类,CVcAppApp是应用程序类,它是CWinApp的派生类。CMainFrame是一个拥有应用程序主窗口的类。CVcAppDoc和CVcAppView是该应用程序的文档和视图类。这些名字用户可以改变。最后单击“完成”(Finish),显示所建项目的信息,单击“确定”后,项目建立完成。图2-7项目的风格、原文件注释和MFC库类型图2-8通知MFC产生的类名称2.1.3输入源程序进行程序设计应用程序项目工程建立以后,就为应用程序的开发建立了一个框架,这是不输入任何程序代码,对该项目程序进行编译和运行,可以生成一个完整的窗口程序。用户根据项目工程中的不同类,输入自己设计的程序代码,完成用户的程序设计。例如,从VcAppClasses中找到CVcAppView的OnDraw()函数,如图2-9所示。双击OnDraw()函数,这时系统会打开VcAppView.cpp文件,而且光标正置于OnDraw()函数中,在其中输入下列语句:pDc-TextOut(30,30,”同学们好,欢迎使用VC++编程!”);编译并运行该程序,运行结果如图2-10所示。图2-9输入程序源代码图2-10运行结果2.2图形设备接口和图形程序设计2.2.1图形设备接口简介在Windows系统中,程序都是通过一个叫做图形设备接口(GDI,GraphicsDeviceInterface)的抽象接口和硬件打交道,Windows会自动将设备环境表映射到相应的物理设备,并且会提供正确的输入/输出指令。GDI是Windows系统核心的三种动态链接库之一,它管理Windows系统的所有程序的图形输出。在Windows系统中,GDI向程序员提供了高层次的绘图函数,只要掌握这些绘图函数,就可以很方便地进行图形程序设计。DC是一个数据结构,当程序向GDI设备中绘图时,需要访问该设备的DC。MFC将GDI的DC封装在C++类中,包括CDC类和CDC派生类,这些类中的许多成员都是对本地GDI绘图函数进行简单封装而形成的内联函数。DC的作用就是提供程序与物理设备或者虚拟设备之间的联系,除此之外,DC还要处理绘图属性的设置,如文本的颜色等。程序员可以通过调用专门的GDI函数修改绘图属性,如SetTextColor()函数。CDC类是GDI封装在MFC中最大的一个类,它表示总的DC。表2.1列出了CDC中的一些常用绘图函数。设备描述表(DC,DeviceContext)表2.1CDC类中常用绘图函数函数描述使用频率Arc()椭圆弧****BitBlt()把位图从一个DC拷贝到另一个DC*Draw3dRect()绘制三维矩形**DrawDragRect()绘制用鼠标拖动的矩形**DrawEdge()绘制矩形的边缘**DrawIcon()绘制图标***Ellipse()绘制椭圆****FillRect()绘制用给定的画刷颜色填充矩形***FillRgn()绘制用给定的画刷颜色填充区域***FillSolidRed()绘制用给定的颜色填充矩形***FloodFill()用当前的画刷颜色填充区域***FrameRect()绘制矩形边界**FrameRgn()绘制区域边界**GetBKColor()获取背景颜色*****GetCurrentBitmap()获取所选位图的指针**GetCurrentBrush()获取所选画刷的指针***GetCurrentFont()获取所选字体的指针***GetCurrentPalette()获取所选调色板的指针***GetCurrentPen()获取所选画笔的指针***GetCurrentPosition()获取画笔的当前位置****GetDeviceCaps()获取显示设备能力的信息**GetMapMode()获取当前设置映射模式***Getpixel()获取给定像素的RGB颜色值*****GetPolyFillMode()获取多边形填充模式***GetTextColor()获取文本颜色****GetTextExtent()获取文本的宽度和高度**GetTextMetrics()获取当前文本的信息**GetWindow()获取DC窗口的指针**GrayString()绘制灰色文本***LineTo()绘制直线******MoveTo()设置当前画笔位置******Pie()绘制饼图***Polygon()绘制多边形***PolyLine()绘制一组直线***RealizePalette()将逻辑调色板映射到系统调色板**Rectangle()绘制矩形****RoundRect()绘制圆角矩形***SelectObject()选择GDI绘图对象**SelectPalette()选择逻辑调色板**SelectStockObject()选择预定义图形对象**这些函数的语法和使用可以通过MSDN帮助查询。2.2.2节主要介绍Windows中基本图形,包括点、直线、圆、圆弧、矩形、椭圆、扇形、折线等程序设计SetBkColor()设置背景颜色******SetMapMode()设置映射模式***SetPixel()把像素设定为给定的颜色******SetTextColor()设置文本颜色******StretchBlt()把位图从一个DC拷贝到另一个DC,并根据需要扩展或压缩位图*TextOut()绘制字符串文本*****设置绘图模式:SetROP2·R2_BLACK像素始终为黑色。·R2_WHITE像素始终为白色。·R2_NOP像素保持不变。·R2_NOT像素为屏幕颜色的反色。·R2_COPYPEN像素为笔的颜色。·R2_NOTCOPYPEN像素为笔颜色的反色。·R2_MERGEPENNOT像素为笔颜色或者屏幕颜色反色的组合色。·R2_MASKPENNOT像素为笔颜色与屏幕颜色反色的组合色。·R2_MERGENOTPEN像素为笔颜色反色或者屏幕颜色的组合色。·R2_MASKNOTPEN像素为笔颜色反色与屏幕颜色的组合色。·R2_MERGEPEN像素为笔颜色或者屏幕颜色的组合色。·R2_NOTMERGEPENR2_MERGEPEN的反色。·R2_MASKPEN像素为笔颜色与屏幕颜色的组合色。·R2_NOTMASKPENR2_MASKPEN的反色。·R2_XORPEN像素为笔颜色与或者屏幕颜色异或的颜色。·R2_NOTXORPENR2_XORPEN的反色。CDC::SetROP2intSetROP2(intnDrawMode);返回绘图模式的前一次取值参数:nDrawMode指定新的绘制模式,可以为下列值之一:2.2.2绘制基本图形(1)画点SetPixel()函数可以在指定的坐标位置按指定的颜色画点。函数原型说明如下:COLORREFCDC::SetPixel(intX,intY,

1 / 111
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功