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)。

相关文章
|
25天前
|
存储 安全 编译器
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
69 0
|
2天前
|
缓存 编译器 API
NumPy与其他语言(如C/C++)的接口实践
【4月更文挑战第17天】本文介绍了NumPy与C/C++的接口实践,包括Python与C/C++交互基础、NumPy的C API和Cython的使用。通过案例展示了如何将C++函数与NumPy数组结合,强调了内存管理、类型匹配、错误处理和性能优化的最佳实践。掌握这些技能对于跨语言交互和集成至关重要。
|
23天前
|
设计模式 安全 C++
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
70 2
|
23天前
|
监控 Linux 编译器
Linux C++ 定时器任务接口深度解析: 从理论到实践
Linux C++ 定时器任务接口深度解析: 从理论到实践
67 2
|
24天前
|
设计模式 算法 中间件
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI Core与CommonAPI DBus的协同工作原理
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI Core与CommonAPI DBus的协同工作原理
50 0
|
24天前
|
存储 并行计算 算法
C++动态规划的全面解析:从原理到实践
C++动态规划的全面解析:从原理到实践
90 0
|
24天前
|
存储 算法 C语言
【C/C++ 数据结构 树】探索C/C++中的二叉树:从理论到实践
【C/C++ 数据结构 树】探索C/C++中的二叉树:从理论到实践
60 0
|
24天前
|
安全 编译器 程序员
【C++ 泛型编程 高级篇】C++ 编程深掘:静态成员函数检查的艺术与实践
【C++ 泛型编程 高级篇】C++ 编程深掘:静态成员函数检查的艺术与实践
62 0
存储 编译器 Linux
18 0
|
2天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”