C++程序设计:原理与实践(进阶篇)17.3 第一个例子

简介:

17.3 第一个例子


我们的目标是定义一些类,能够用来创建可以在屏幕上显示的对象。例如,我们希望绘制一个由一系列相连的线构成的图形,下面程序给出了一个非常简单的版本:

 

运行该程序,屏幕显示如下。

 

我们来逐行分析这个程序,看看它做了什么。它首先包含图形接口库的头文件:

 

接着,在main()函数的开始处告知编译器在Graph_lib中查找图形工具:

 

然后,定义一个点作为窗口的左上角:

 

接下来在屏幕上创建一个窗口:

 

我们使用Graph_lib接口库中一个名为Simple_window的类表示窗口,此处定义了一个名为win的Simple_window对象,即win是Simple_window类的变量。初始化列表中的值将窗口win的左上角设置为tl,宽度和高度分别设置为600像素和400像素。我们随后会介绍更多细节,但此处的关键点就是通过给定宽度和高度来定义一个矩形。字符串Canvas用于标识该窗口,你可以在窗口框左上角的位置看到Canvas字样。

接下来,我们在窗口中放置一个对象:

 

我们定义了一个多边形对象poly,并向其添加顶点。在我们的图形库中,一个Polygon对象开始为空,可以向其中添加任意多个顶点。由于我们添加了三个顶点,因此得到了一个三角形。一个点是一个值对,给出了点在窗口内的x和y(水平和垂直)坐标。

纯粹是为了展示图形库的功能,我们接下来将多边形的边染为红色:

 

最后,我们将poly添加到窗口win:

 

如果程序执行得不是那么快的话,你会注意到,到现在为止,屏幕上没有任何显示,是的,什么都没有。我们创建了一个窗口(确切地说,是Simple_window类的一个对象),创建了一个多边形(名为poly)并将其染为红色(Color::red),最后将其添加到窗口(名为win),但我们还没有要求在屏幕上显示此窗口。显示操作由程序的最后一行代码来完成:

 

为了让GUI系统在屏幕上显示一个对象,你必须将控制权交给“系统”。wait_for_button()就是完成这个功能,另外,它还等待用户按下(点击)窗口中的“Next”按钮,以便执行下面的程序。这样,在程序结束和窗口消失之前,你就有机会看到窗口中的内容。当你按下按钮后,程序会结束,关闭该窗口。

单独地看这个窗口,效果如下图所示:

 

你可能注意到,我们小小地“作弊”了一下。标记为“Next”的按钮是从哪里来的?实际上它是Simple_window类内置的。在第21章中,我们将会从Simple_window类过渡到“普通”的Window类,它不包含任何可能造成混淆的内置功能。那时,我们还会介绍如何编写代码来控制与窗口的交互。

在接下来的三章里,当希望逐阶段(一帧一帧)地显示信息时,我们将简单地使用“Next”按钮来实现显示画面的转换。

对于操作系统为每个窗口添加窗口框(frame),你应该非常熟悉了,但可能没有特别留意过。不过,本章和后面章节中的图片都是在微软Windows系统下生成的,因此你“免费”得到了窗口框右上角的三个常用按钮。这些按钮是很有用的:如果你的程序变得杂乱无章(在调试过程中确实有可能出现这种情况),可以点击×按钮结束程序。当你在其他系统上运行程序时,根据系统惯例的不同,添加的窗口框也可能有所不同。在上面的示例程序中,我们对窗口框所做的仅仅是设置了一个标签(即Canvas)。

相关文章
|
2月前
|
C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(二)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
编译器 C++ 开发者
【C++】深入解析C/C++内存管理:new与delete的使用及原理(三)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
存储 C++
【C++篇】C++类和对象实践篇——从零带你实现日期类的超详细指南
【C++篇】C++类和对象实践篇——从零带你实现日期类的超详细指南
27 2
【C++篇】C++类和对象实践篇——从零带你实现日期类的超详细指南
|
2月前
|
存储 编译器 C语言
C++类与对象深度解析(一):从抽象到实践的全面入门指南
C++类与对象深度解析(一):从抽象到实践的全面入门指南
51 8
|
2月前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
42 1
|
3月前
|
C++
c++继承层次结构实践
这篇文章通过多个示例代码,讲解了C++中继承层次结构的实践应用,包括多态、抽象类引用、基类调用派生类函数,以及基类指针引用派生类对象的情况,并提供了相关的参考链接。
|
6月前
|
关系型数据库 MySQL 测试技术
技术分享:深入C++时间操作函数的应用与实践
技术分享:深入C++时间操作函数的应用与实践
55 1
|
6月前
|
存储 JavaScript 前端开发
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
|
6月前
|
C++
技术经验分享:C++程序设计的技巧
技术经验分享:C++程序设计的技巧
39 0