写一个简单的fltk程序
所有的程序到必须包含头文件<FL/Fl.H>,另外还要包含该程序用到的类的头文件。List 1说明了如何用FLTK显示一个窗口,窗口中显示“Hello
World!”
Listing 1 - "hello.cxx"
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
int main(int argc, char **argv) {
Fl_Window *window = new Fl_Window(300,180);
Fl_Box *box = new Fl_Box(20,40,260,100,"Hello, World!");
box->box(FL_UP_BOX);
box->labelsize(36);
box->labelfont(FL_BOLD+FL_ITALIC);
box->labeltype(FL_SHADOW_LABEL);
window->end();
window->show(argc, argv);
return Fl::run();
}
包含了需要的头文件后,该程序创建了一个窗口
Fl_Window *window = new Fl_Window(300,180);
还创建了一个box类,标签是“Hello World!”
Fl_Box *box = new Fl_Box(20,40,260,100,"Hello, World!");
下一步,我们设置了box的类型,大小,字体和标签的类型
box->box(FL_UP_BOX);
box->labelsize(36);
box->labelfont(FL_BOLD+FL_ITALIC);
box->labeltype(FL_SHADOW_LABEL);
最后,我们显示该窗口并进入FLTK 事件循环
window->end();
window->show(argc, argv);
return Fl::run();
运行该程序得到的界面如下,你能直接关闭该窗口退出,也可以按ESC键退出
图2-1
Hello,World! 窗口
创建控件
创建控件用c++ new 操作符。很多控件的参数都如构造函数中的:
Fl_Widget(x, y, width, height, label)
X ,y 参数决定窗口在屏幕中的位置,在FLTK中,左上角的就是屏幕的原点(x=0,y=0),单位是象素。
Width,height参数是控件或窗口的大小。Label是一个指向标签字符串的指针,也可以为NULL.如若没有特别指定,label默认的NULL.label字符串必须是静态存储的,因为FLTK并不复制她,而只是用他的指针。
Get/Set函数
Box->box(FL_UP_BOX)设置box的类型。默认的是FL_NO_BOX,意思是什么都不用画。在我们”Hello,World!”例子中,我们使用了FL_UP_BOX,意思是一个突起的方框。
Box->box()是用来得到当前的box
的类型,FLTK用重载来简化Get/Set函数,一个set函数通常用这种形式"voidname(type)",而一个Get函数通常用"typename()const".
改变属性后重画
set/get函数是非常有效率的。但是set函数不需要调用redraw(),你必须使用的时候自己调用它。这将最大的减少代码的大小和执行时间。有两个例外,一个是value()要调用redraw()一个是label()要调用redraw_label(),如果有需要的话。
标签
所有的控件都支持标签。不如说窗口控件,标签被用来作为标题,我们的程序调用了labelfont,labelsize,和labeltype函数。
Labelfont函数设置标签字体的字体类型。比如粗体FL_BOLD,斜体FL_ITALIC等。
Labelsize函数设置字体的大小
Labeltype函数设置标签的样式。FLTK支持normal,embossed,shadowed样式,你也可以自己定义需要的样式,比如我们例子中用的是shadowed样式
显示窗口
show()函数显示控件或窗口。对于窗口来说你还可以通过命令行设置窗口的外观,大小或位置。
主事件循环
与其他GUI一样,FLTK也是基于消息循环。用户产生的事件,比如鼠标移动,按纽点击,键盘活动都被发送给应用程序。应用程序可能会忽略该事件,也可能会对该事件产生响应。比如按纽按下的时候的重画,输入框内容的输入等等。
FLTK同时也支持idle,timer,和file
的模拟事件。当他们发生时会调用某个已经定义好的函数。Idle函数被调用当没有用户输入,也没有定时器发生,也没有文件监听的时候。简而言之,当应用程序不做任何事情的时候调用idle函数。该函数一般用来更新3D显示或做一些后台工作。
当某个定义的时间到时,定时器函数被调用。他可以用来弹出进度的对话筐,或做一些有规律的间歇的事情。FLTK的定时器不是百分之百的准确,所以不能用来等测量时间间隔等比较精确的定时。
File函数在数据已经准备读或写的时候被调用,或者是当文件有错误发生时也被调用,他们通常被用来监视网络连接(sockets).
用标准的编译器编译程序
在NUIX环境下,你需要告诉编译器到哪里去找到头文件,通常用-I选项
CC -I/usr/local/include ...
gcc -I/usr/local/include ...
fltk-config脚本能自动找到头文件,但是你的头文件需要安装在指定的目录下。
CC `fltk-config --cxxflags` ...
同样,当连接你的程序时需要告诉编译器你的FLTK库
CC ... -L/usr/local/lib -lfltk -lXext -lX11 -lm
gcc ... -L/usr/local/lib -lfltk -lXext -lX11 -lm
除了fltk库之外,还有fltk_forms库支持Xforms类,fltk_gl支持OpenGL和GLUT类,fltk_image库支持image文件类,Fl_Help_Dialog控件和系统图标
注意:以上库的名称分别为 "fltk.lib", "fltkgl.lib", "fltkforms.lib", and "fltkimages.lib"
类似,fltk-config脚本也能获得库文件
CC ... `fltk-config --ldflags`
Forms,GL,images库在编译时应该使用”—use-foo”选项。比如:
CC ... `fltk-config --use-forms --ldflags`
CC ... `fltk-config --use-gl --ldflags`
CC ... `fltk-config --use-images --ldflags`
CC ... `fltk-config --use-forms --use-gl --use-images --ldflags`
最后你可以用fltk-config脚本编译一个简单的FLTK程序
fltk-config --compile filename.cpp
fltk-config --use-forms --compile filename.cpp
fltk-config --use-gl --compile filename.cpp
fltk-config --use-images --compile filename.cpp
fltk-config --use-forms --use-gl --use-images --compile filename.cpp
以上的编译将会产生一个可执行文件filename.
分享到:
相关推荐
出版者的话 译者序 前言 第0章 致读者 第1章 计算机、人与程序设计 第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的...
出版者的话 译者序 前言 第0章 致读者 第1章 计算机、人与程序设计 第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...
第一部分 基本知识 第2章 Hello,World! 第3章 对象、类型和值 第4章 计算 第5章 错误 第6章 编写一个程序 第7章 完成一个程序 第8章 函数相关的技术细节 第9章 类相关的技术细节 第二部分 输入...