17.4 使用GUI库
在本书中,我们不直接采用操作系统的图形和GUI(图形用户界面)工具,否则会将程序限制在一种特定的操作系统上,而且需要处理很多复杂的细节问题。与处理文本I/O一样,我们将使用一个函数库来消除操作系统间的差异、I/O设备的变化等问题,并简化程序代码。不幸的是,C++并没有提供一个像标准流I/O库一样的标准GUI库,于是我们从很多可用的C++ GUI库选择了一个。为了不局限于这种GUI库,并且避免一开始就接触其复杂功能,我们只使用一组在任何GUI库中都只需几百行程序就能实现的接口类。
我们使用的(目前还只是间接使用)GUI工具包名为FLTK(Fast Light Tool Kit,读作“full tick”),该工具包源自www.f?ltk.org。我们的代码可以移植到任何使用FLTK的平台(Windows、Unix、Mac、Linux等)。我们的接口类也可以使用其他的图形工具包重新实现,因此基于它的代码的移植性实际上还要更好一些。
接口类实现的编程模型比通常的工具包提供的更简单。例如,我们整个图形和GUI接口库的C++代码大约为600行,而最简单的FLTK文档也达370页。你可以从www.f?ltk.org下载,但我们并不推荐你阅读,目前还不需要那些细节。第17~21章给出的概念可用于任何一个流行的GUI工具包,当然我们也会解释接口类是如何映射到FLTK的,以便在必要的时候能够直接使用其他的工具包。
我们实现的“图形世界”的部分结构如下:
接口类为二维形状提供了简单、用户可扩展的基本框架,并支持简单的颜色。为了实现这些功能,我们给出了基于“回调函数”的GUI概念,这些函数由屏幕上的用户自定义按钮等组件触发(参见第21章)。