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