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)。
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的