fltk中文手册p.docx
《fltk中文手册p.docx》由会员分享,可在线阅读,更多相关《fltk中文手册p.docx(22页珍藏版)》请在冰豆网上搜索。
![fltk中文手册p.docx](https://file1.bdocx.com/fileroot1/2023-1/9/ffe6a9e1-6035-4d2c-a5f7-61e050ee518c/ffe6a9e1-6035-4d2c-a5f7-61e050ee518c1.gif)
fltk中文手册p
第一章FLTK编程模型
1.1FLTK功能简介
1.2搭建FLTK开发环境
windows下搭建FLTK开发环境
ubuntu下搭建FLTK开发环境
构件简介
事件处理
消息处理
编程
第二章常用的控件和属性
按钮
文本
颜色
Box类型
第三章FLTK的画图函数
何时可以画图
FLTK的画图函数
剪切
颜色
设置线条的属性
画一般的图形函数
画封闭的线,一次连接个顶点
画三边形或四边形,并填充内部
复杂图形函数
字体
覆盖画图函数
第四章在FLTK中自定义控件
定制图形控件说明
如何开发一个控件的子类
处理事件
画控件
第一章:
FLTK编程模型
FLTK(FastLightToolKit发音为fulltick)是一种使用C++开发的GUI工具包,它可以应用于Unix,Linux,MS-Windows95/98/NT/2000和MacOS操作系统平台,相对于其它的许多图形接口开发工具包(如MFC、GTK、QT等),它具有体积很小、速度比较快,且有着更好的移植性。
FLTK(FastLightToolKit发音为fulltick)是一种使用C++开发的GUI工具包,它可以应用于Unix,Linux,MS-Windows95/98/NT/2000和MacOS操作系统平台,相对于其它的许多图形接口开发工具包(如MFC、GTK、QT等),它具有体积很小、速度比较快,且有着更好的移植性。
本文就FLTK编程的一些基本方法进行介绍。
功能简介
(1)提供丰富的跨平台的GUI构件(Widget)。
有按钮,菜单,窗口等,近六十个。
(2)支持OpenGL,提供Fl_GL_Window,支持OpenGL相关的操作。
(3)提供界面设计工具FLUID,非常方便进行界面的设计。
(4)良好的跨平台移植性。
(5)支持多种C++编译器,Gcc,BC,VC等等。
(6)灵活性。
FLTK本身可以定制,以满足不同的需要。
这使得FLTK在嵌入式开发上有着极大的竞争力,这正是我要推荐使用FLTK的原因。
本文就FLTK编程的一些基本方法进行介绍.
搭建FLTK开发环境
安装FLTK很简单,我们只需要下载它的源文件,解压缩到目录下,在Linux下我们只需要输入make,编译完成然后makeinstall就头文件安装到/usr/include/FL目录下。
库文件就在/usr/lib下,也可以自己编译之后把这些文件复制到这些目录,或者不需要复制,只在编译连接的时候指定路径。
在window下可以使用VC,BC打开相应目录下的工程文件编译即可。
windows下搭建FLTK开发环境
第一步:
下载FLTK源码包
FLTK官网
下载后解压缩到C盘根目录下,命名为FLTK
进到C:
\FLTK\ide\visualc目录下,找到
用VisualC++打开项目,然后选择【组建】-->全部重建,就开始编译了
编译完成后关闭VisualC++
第二步:
添加FTLK库文件
(1)重新打开VisualC++,新建一个Win32Application项目,命名为FLTK,然后再新建一个文件
(2)建立好之后选择【工程】->【设置】-->选择“连接”选项卡-->“分类”下拉框选择输入,在对象/
库模块添加:
还要在忽略库中添加:
LIBCD
(3)之后选择“C/C++"选项卡,"分类”下拉框选择:
codegeneration,在“userun-timelibrary"中选择”Multi-threadedDLL“最后确定。
(4)选择【工具】-->【选项】--》"目录"选项卡
在”目录“下拉框中选择"IncludeFiles"然后新增一项C:
\FLTK(导入头文件)
(5)在“目录“下拉框中选择"LibraryFiles”然后新增一项C:
\FLTK(导入类库)
(6)编译运行
ubuntu下搭建FLTK开发环境
第一步:
配置基础开发环境GCC
xhy@xhy-desktop:
~$sudoapt-getinstallbuild-essential
第二步:
安装QT开发环境
xhy@xhy-desktop:
~$sudoapt-getinstallqt4-dev-toolsqt4-docqt4-qtconfigqt4-demosqt4-designer
第三步:
下载FLTK源码包
FLTK官网
下载后解压缩:
第四步:
编译安装FLTK
xhy@xhy-desktop:
~$cdFLTK
xhy@xhy-desktop:
~$make
xhy@xhy-desktop:
~$sudomakeinstall
第五步:
测试环境
写一个简单的FLTK程序
#include
#include
#include
intmain(intargc,char**argv)
{
Fl_Window*window=newFl_Window(300,180);
Fl_Box*box=newFl_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);
returnFl:
:
run();
}
包含了需要的头文件后,该程序创建了一个窗口
Fl_Window*window=newFl_Window(300,180);
还创建了一个box类,标签是“HelloWorld!
”
Fl_Box*box=newFl_Box(20,40,260,100,"Hello,World!
");
下一步,我们设置了box的类型,大小,字体和标签的类型
box->box(FL_UP_BOX);
box->labelsize(36);
构件简介
FLTK作为GUI开发包,包含了常用的图形用户接口需要的一些构件,视觉表现非常丰富,如下两图所示:
常用按钮构件
按钮名称
头文件
按钮名称
头文件
Fl_Button
Fl_Check_Button
Fl_Light_Button
Fl_Repeat_Button
Fl_Return_Button
Fl_Round_Button
对于具有Fl_Check_Button、Fl_Loght_Button和Fl_Round_Button当状态为off时value()=0,On时value()返回1。
处理按钮时间可以使用回调(callback)函数,参见后面的事件处理。
文本处理构件
构件名称
头文件
构件名称
头文件
Fl_Input
Fl_Output
Fl_Multiline_Input
Fl_Multiline_output
设置和取得文本内容使用value();
如:
(newFl_Input(x,y,width,height,"Label"))->value("HelloWorld!
");
其他构件参见的文档说明。
写一个简单的FLTK程序
#include
#include
#include
intmain(intargc,char**argv)
{
Fl_Window*window=newFl_Window(300,180);
Fl_Box*box=newFl_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);
returnFl:
:
run();
}
包含了需要的头文件后,该程序创建了一个窗口
Fl_Window*window=newFl_Window(300,180);
还创建了一个box类,标签是“HelloWorld!
”
Fl_Box*box=newFl_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);
returnFl:
:
run();
运行该程序得到的界面如下,你能直接关闭该窗口退出,也可以按ESC键退出
事件处理
对于一般构件的如按钮,菜单等常用事件的处理一般可以使用回调函数实现,回调函数的原型是:
voidXXX_callback(Fl_Widget*w,void*data)
{
含以下头文件
#include
#include
#include
2.定义一个子类,如下代码所示
classMYGLWindow:
publicFl_Gl_Window
{
voiddraw();现draw()事件
voidMYGLWindow:
:
draw()件处理实现
voidMYGLWindow:
:
handle(intevent)编译时需要包含openGL32的库文件,名字在不同的平台名字稍微不同。
2.使用代替头文件,不要使用后者的头文件。
例子程序比较长,附在参考中。
运行显示,弹出菜单后如图所示:
第二章:
常用的控件和属性
这章将描述FLTK提供的控件,并介绍如何得到和设置控件的标准属性。
按钮
FLTK提供了很多类型的按钮
Fl_Button普通按钮
Fl_Check_Button带有选择框的按钮
Fl_Light_Button带有指示灯的按钮
Fl_Repeat_Button
Fl_Return_Button能被Enter激活的按钮
Fl_Round_Button带有圆形选择框的按钮
每一个按钮都需要相应的头文件。
构造函数包含了控件的位置,大小和可选的标签
Fl_Button*button=newFl_Button(x,y,width,height,"label");
Fl_Light_Button*lbutton=newFl_Light_Button(x,y,width,height);
Fl_Round_Button*rbutton=newFl_Round_Button(x,y,width,height,"label");
每一个按钮可以设置自己的类型用type(),通过这个设置,可以让一个按钮为
pushbutton,togglebutton,orradiobutton:
button->type(FL_NORMAL_BUTTON);lbutton->type(FL_TOGGLE_BUTTON);rbutton->type(FL_RADIO_BUTTON);对于toggle和radio按钮,value()函数返回当前的状态,开/关(0代表关,1代表开),set()和clear()分别用来设置和清除togglebutton的状态。
RadioButton可以用setonly()打开,同组中的其他Radiobutton按钮将关闭。
here
文本
FLTK提供了几种文本控件来显示和接收文本信息
Fl_Input输入单行的文本
Fl_Output输出单行的文本
Fl_Multiline_Input多行文本输入框
Fl_Multiline_Output多行文本输出框
Fl_Text_Display显示多行文本控件
Fl_Text_Editor多行文本编辑控件
Fl_Help_View显示HTML文本控件
Fl_OutputandFl_Multiline_Output控件允许互相copy,但是不能改变
Value()函数用来设置和得到显示的字符串
Fl_Input*input=newFl_Input(x,y,width,height,"label");
input->value("Nowisthetimeforallgoodmen...");
这个字符串将被拷贝到该控件的存储空间内,当用value()设置后
Fl_Text_DisplayandFl_Text_Editor用Fl_Text_Buffer来设置他的值,而不是一个简单的字符串。
Valuators
Valuators用来显示数字轨迹信息
Fl_Counter带有箭头按钮的控件显示当前值
Fl_Dial圆形手柄
Fl_Roller
Fl_Scrollbar滚动条控件
Fl_Slider带有手柄的滑块
Fl_Value_Slider显示当前值的滑块
Figure3-2:
FLTKvaluatorwidgets
value()函数得到和设置控件的当前值,minimum()和maximum()设置了控件的范围
群Groups
Fl_Group控件被用来做一般的容器控件。
除了单选按钮群以外,还被用来形成windows,tabs,scrolledwindows等控件。
一下是FLTK提供的群类。
Fl_Double_Window一个双缓冲的窗口
Fl_Gl_Window一个OpenGL的窗口类
Fl_Group容器类的基类。
能被用来包含所有的控件
Fl_Pack将控件收集到一个群区域中
Fl_Scroll滚动窗口区域
Fl_Tabs
Fl_Tile
Fl_Window
设置控件的位置和大小
控件的位置和大小在你创建的时候就已经设置了,你可以通过x(),y(),w(),h(),来得到。
改变大小和位置用position(),resize(),size()函数。
button->position(x,y);
group->resize(x,y,width,height);
window->size(width,height);
颜色
FLTK用一个32位的无符号整形存储颜色。
它可能是256种颜色一个索引,也可能是一个24位的RGB颜色。
调色板不是X或WIN32的colormap,它是有对应固定内容的调色板
以下是一些常用的颜色的符号定义:
FL_BLACK
FL_RED
FL_GREEN
FL_YELLOW
FL_BLUE
FL_MAGENTA
FL_CYAN
FL_WHITE
这些符号是FLTK控件默认的颜色,详细情况请参考Enumerations
FL_FOREGROUND_COLOR
FL_BACKGROUND_COLOR
FL_INACTIVE_COLOR
FL_SELECTION_COLOR
RGB颜色可以用fl_rgb_color()函数设置。
Fl_Colorc=fl_rgb_color(80,170,255);
控件的颜色用color()函数设置
button->color(FL_RED);
类似的,标签的颜色用labelcolor()函数设置
button->labelcolor(FL_WHITE);
类型
Fl_Boxtype的类型在<>中定义,可以用Fl_Widget:
:
box()设置和得到。
FL_NO_BOX意思是任何东西都不要画,但仍然是留在窗口上。
Fl_。
。
。
_FRAME类型只是画边框,中间不做任何改变。
如图中蓝色的部分。
制作你自己的Boxtypes
你可以自己制作个性风格的boxtype.通过一个小函数,并将其加到boxtypes的列表中画图函数
画图函数传递的参数控件的是box的边界和背景颜色
voidxyz_draw(intx,inty,intw,inth,Fl_Colorc)
{
}
如一个简单的画图函数填充一个矩形,给定颜色并画一个黑色的外框
voidxyz_draw(intx,inty,intw,inth,Fl_Colorc)
{
fl_color(c);
fl_rectf(x,y,w,h);
fl_color(FL_BLACK);
fl_rect(x,y,w,h);
}
加入自定义的box类型
Fl:
:
set_boxtype函数添加或取代特定的box类型
#defineXYZ_BOXFL_FREE_BOXTYPEFl:
:
set_boxtype(XYZ_BOX,xyz_draw,1,1,2,2);
最后4个参数是偏移量,当画该box时,x,y,w,h会减去相应的偏移量
第三章:
FLTK的画图函数
这章涵盖了FLTK提供的所有画图函数
何时可以画图
什么时候可以画图,只有在几个地方可以执行画图代码。
在其他地方调用该函数会出现未定义该行为的错误:
1.最常出现的地方是在虚拟函数Fl_Widget:
:
draw()中。
你的类需要继承一个Fl_Widget类,然后在自己的类中写draw()函数。
2.在写boxtype和labeltype函数中用到。
3.你可以调用Fl_Window:
:
make_current()来增加控件的更新。
用Fl_Widget:
:
window()找到要更新的窗口
FLTK的画图函数
调用这些画图函数之前,要包含头文件
FLTK提供以下画图函数:
Boxes
Clipping
Colors
Linedashesandthickness
FaseShapes
ComplexShapes
Text
Images
Overlay
Boxes
FLTK提供了三个函数来画box,主要用于画按钮和其他的UI控件。
每一个函数都提供了box的左上角,宽,高等参数。
voidfl_draw_box(Fl_Boxtypeb,intx,inty,intw,inth,Fl_Colorc);
该函数画了一个标准的box,box类行为b,颜色是c
voidfl_frame(constchar*s,intx,inty,intw,inth);
该函数画了一个边框,s是4个字母,A代表黑色,X代表白色,顺序是上,左,下,右。
voidfl_frame2(constchar*s,intx,inty,intw,inth);
与fl_frame不同时s代表的颜色的顺序,分别是下,右,上,左。
剪切
你可以限制你的画图行为在一个矩形之内,应用fl_push_clip(x,y,w,h),释放用fl_pop_clip.
该矩形用象素未单位,不会受变换矩阵的影响
另外,系统会提供更新窗口的剪切域,但是比一个简单的矩形要复杂的多
voidfl_clip(intx,inty,intw,inth)
voidfl_push_clip(intx,inty,intw,inth)
用一个矩形剪切一个区域,并把这个区域压入堆栈。
Fl_clip()不提倡,并将在以后的版本中去除该函数
voidfl_push_no_clip()
压入一个空的剪切域到堆栈
voidfl_pop_clip()
恢复剪切域,画图范围不再受矩形限制,fl_push_clip()一定要调用该函数。
intfl_clip_box(intx,inty,intw,inth,int&X,int&Y,int&W,int&H)
新的剪切域与旧的剪切域相交,相交的矩形位置保存在X,Y,W,H,如果完全没有相交,则W,H为0;
颜色
FLTK将颜色处理为32位的整形。
0-255分别代表不同的颜色。
Fl_color枚举类型定义了前256个基本的颜色。
颜色值大于255的被认为是24位的RGB值。
显示的是最接近该值的颜色。
voidfl_color(Fl_Color)设置当前使用的颜色
Fl_Colorfl_color()返回最后设定的颜色
voidfl_color(ucharr,ucharg,ucharb)设置rgb颜色。
设置线条的属性
FLTK支持设定线条的宽度和类型。
voidfl_line_style(intstyle,intwidth=0,char*dashes=0)
style是以下几种类型之一,默认的是FL_SOLID。
FL_SOLID-------
FL_DASH----
FL_DOT.......
FL_DASHDOT-.-.
FL_DASHDOTDOT-..-
FL_CAP_FLAT
FL_CAP_ROUND
FL_CAP_SQUARE(extendspastendpoint1/2linewidth)
FL_JOIN_MITER(pointed)
FL_JOIN_ROUND
FL_JOIN_BEVEL(flat)
宽度是以象素值为单位,默认的0
画一般的图形函数
下面的函数几乎可以用来画所有的控件,这些函数画图非常精确,也非常快。
他们可以在任何支持FLTK的平台上使用。
Voidfl_point(intx,inty)画点函数
Voidfl_rectf(intx,inty,intw,inth)画一个矩形并填充内部
Voidfl_rectf(intx,inty,intw,inth,ucharr,ucharg,ucharb)自定义颜色填充矩形
Voidfl_line(intx,inty,intx1,inty1)画一条直线,起点为x,y,终点为x1,y1
Voidfl_line(intxinty,intx1,inty1,intx2,inty2)画两条直线
voidfl_loop(intx,inty,intx1,inty1,intx2,inty2)
voidfl_loop(intx,inty,intx1,inty1,intx2,inty2,intx3,inty3)
Outlinea3or4-sidedpolygonwith