注:这是FLTK的PDF手册中第11章介绍FLUID编程的翻译,新手翻译很多不懂,错误之处,不吝提出,及时更改。翻译中不会翻译或者感觉不太明白的地方在每句之后使用【??】标记。
Chapter 11 使用FLUID编程
本章介绍怎样使用Fast Light User-Interface Designer(“FLUID”)创建你的图形用户界面(GUIs). 章节目录如下:
11.1 FLUID是什么
快速轻量用户界面设计器(FastLight User-Interface Designer)或者叫FLUID,是一个用来产生FLTK源代码的图形编辑器。FLUID编辑和保存它的状态在.fl文件中。这些文件是文本,所以你可以在文本编辑器中编辑它们(需要小心处理),可能会收到意想不到的效果。
FLUID能够编译.fl文件生成.cxx和.h文件。.cxx文件定义.fl文件中的所有的对象而.h文件声明所有的全局对象。FLUID也支持标签字符串的本地化(国际化)使用的是消息文件和GNU的gettext或者POSIX的catgets接口。【译注:这两个应该是程序本地化的工具】。
你可以将所有的代码(包括main()函数)都放进.fl文件中生成一个简单的程序,然后只生成一个用于编译的.cxx源文件。多数程序要比这复杂得多,所以你需要写其他的调用FLUID函数的cxx文件。这些cxx文件必须#include那些.h文件或者它们#include这些cxx文件所以它看起来仍然像一个单独的源文件。
图11.1 FLUID的组织结构图
一般FLUID文件定义一个或多个输出C++代码的函数或者类。每个函数定义一个或多个FLTK窗口以及在这些窗口中的所有图形构件。
FLUID创建的构件可以是“命名的(named)”,“复合命名的(complex named)”或者“未命名的(unnamed)”。一个命名的构件使用一个合法的C++变量标示符作为它的名字(也就是数字字母和下划线)。这种情况下FLUID在(程序中)调用定义构件的函数之后将定义一个指向该构件的全局变量或者类成员。一个复合命名对象在名字中有一个’.’或者’->’标点或者其他的符号,这种情况下FLUID将分配一个指向构件名字【??】的指针,但是并不尝试去声明它。这可用于将构件放入结构体中。一个未命名的构件有一个空的名字而且没有指针被保存。
构件可以调用一个你在另一个源文件中写得命名回调函数或者你可以提供一小段C++源码然后FLUID将其生成为一个私有回调函数放入cxx文件中。
11.2 UNIX下运行FLUID
要在UNIX下运行FLUID,输入:
Fluid filename.fl &
来编辑名字为filename.fl的fl文件。如果该文件不存在,将弹出一个错误,但是如果忽略你将可以编辑一个空的以那个名字命名的文件。你可以不通过名字运行FLUID,在这种情况下你可以编辑一个空的设置【??】,但是你可以使用另存为将其保存到文件中。
你可以在文件名字前使用(以下)任何标准的FLTK开关【选项】:
-display host:n.n
-geometry WxH+X+Y
-title windowtitle
-name classname
-iconic
-fg color
-bg color
-bg2 color
-scheme schemename
如果用户调用了颜色开关选项那么改变颜色来看看你的界面看起来如何可能是有用的。类似的,使用”-scheme plastic”将显示使用了”plastic”主题的界面显示看起来怎么样。
在当前版本中,如果你不使用’&’将FLUID作为后台运行,你可以使用在终端输入CTRL-C的方式退出FLUID。它将立即退出,丢失所有的修改。
11.3 在Windows下运行FLUID
要在Win32下运行FLUID,只需要双击FLUID.exe文件就可以了。你当然也可以通过命令提示符窗口启动。在Win32下FLUID是在后台运行的。
11.4 编译.fl文件
FLUID也可以被用作一个命令行“编译器“来从.fl文件生成.cxx和.h文件。要这样做,只要输入:
fluid –cfilename.fl
该命令将读filename.fl文件并且生成filename.cxx和filename.h文件。所有的filename.fl的前缀路径将被去除,所以它们(cxx和h)将被写入到当前目录下。如果读或者写文件时发生错误,FLUID将打印错误并且以非零退出码退出。你可以在makefile中使用下面的代码来自动化生成源文件和头文件:
my_panels.hmy_panels.cxx: my_panels.fl fluid –c my_panels.fl
大部分版本的make都支持编译.fl的规则:【??】
.SUFFIXES: .fl.cxx .h
.fl.h .fl.cxx:
fluid –c $<
11.5 一个简短的指南
FLUID是一个令人惊奇的功能强劲的小程序。然而这种功能是有代价的,那就是它不能完成看起来很简单的任务。该指南将介绍怎样使用FLUID生成一个在CubeView程序中使用的完整的用户界面类,该CubeView程序是由FLTK提供的。
图11.2 CubeView例子
这个窗口就是类CubeViewUI,包括所有的类函数在内,所有这些都是由FLUID生成的。立方体的显示中心是一个单独的叫做CubeView的Fl_Gl_Window的子类。CubeViewUI通过滑动块和滚轴的回调函数来控制CubeView类,从而实现CubeView的视角变换和缩放。
在本指南结束时,你将学到如下知识(希望如此):
1、 使用FLUID创建一个完整的用户界面类,包括构造函数和任何需要的成员函数。
2、 使用FLUID设置自定义构件类的回调成员函数。
3、 子类化Fl_Gl_Window来满足你的需要。