fltk中文手册.docx
- 文档编号:27328364
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:34
- 大小:31.25KB
fltk中文手册.docx
《fltk中文手册.docx》由会员分享,可在线阅读,更多相关《fltk中文手册.docx(34页珍藏版)》请在冰豆网上搜索。
fltk中文手册
第一章FLTK编程模型
1.1FLTK功能简介
1.2搭建FLTK开发环境
1.21windows下搭建FLTK开发环境
1.22ubuntu下搭建FLTK开发环境
1.3FLTK构件简介
1.4FLTK事件处理
1.5FLTK消息处理
1.60penGL编程
第二章常用的控件和属性
2.1按钮
2.2文本
2.3颜色
2.4Box类型
第三章FLTK的画图函数
3.1何时可以画图
3.2FLTK的画图函数
3.3剪切
3.4颜色
3.5设置线条的属性
3.6画一般的图形函数
3.7画封闭的线,一次连接个顶点
3.8画三边形或四边形,并填充内部
3.9复杂图形函数
3.10字体
3.11覆盖画图函数第四章在FLTK中自定义控件
4.1定制图形控件说明
4.2如何开发一个控件的子类
4.3处理事件
4.4画控件
第一章:
FLTK编程模型
FLTK(FastLightToolKit发音为fulltick)是一种使用C++开发的GUI工具包,它可以应
用于Unix,Linux,MS-Windows95/98/NT/2000和MacOS操作系统平台,相对于其它的许多图形接口开发工具包(如MFCGTKQT等),它具有体积很小、速度比较快,且有着更好的移植性。
FLTK(FastLightToolKit发音为fulltick)是一种使用C++开发的GUI工具包,它可
以应用于Unix,Linux,MS-Windows95/98/NT/2000和MacOS操作系统平台,相对于其它的许多图形接口开发工具包(如MFCGTKQT等),它具有体积很小、速度比较快,且有着更好的移植性。
本文就FLTK编程的一些基本方法进行介绍。
1.1FLTK功能简介
(1)提供丰富的跨平台的GUI构件(Widget)。
有按钮,菜单,窗口等,近六十个。
⑵支持OpenGL提供FI_GL_Window,支持OpenGL相关的操作。
(3)提供界面设计工具flUid,非常方便进行界面的设计。
(4)良好的跨平台移植性。
⑸支持多种C++编译器,Gcc,BC,VC等等。
⑹灵活性。
FLTK本身可以定制,以满足不同的需要。
这使得FLTK在嵌入式开发上有着极大
的竞争力,这正是我要推荐使用FLTK的原因。
本文就FLTK编程的一些基本方法进行介绍.
1.2搭建FLTK开发环境
安装FLTK彳艮简单,我们只需要下载它的源文件,解压缩到目录下,在Linux下我们只需要输
入make编译完成然后makeinstall就头文件安装到/usr/include/FL目录下。
库文件就在
/usr/lib下,也可以自己编译之后把这些文件复制到这些目录,或者不需要复制,只在编译连接的时候指定路径。
在window下可以使用VC,BC打开相应目录下的工程文件编译即可。
1.21windows下搭建FLTK开发环境
第一步:
下载FLTK源码包
FLTK官网
下载后解压缩到C盘根目录下,命名为FLTK
进到C:
\FLTK\ide\visualc目录下,找到fltk.dsw
用VisualC++6.0打开项目,然后选择【组建】-->全部重建,就开始编译了
编译完成后关闭VisualC++6.0
第二步:
添加FTLK库文件
(1)重新打开VisualC++6.0,新建一个Win32Application项目,命名为FLTK然后再新建
一个hello.cxx文件
(2)建立好之后选择【工程】->【设置】-->选择“连接”选项卡-->“分类”下拉框选择输入,在对象/
库模块添加:
fltkd.libfltkgld.libcomctl32.libwsock32.libopengl32.libglu32.lib
还要在忽略库中添加:
LIBCDlibcd.lib
⑶之后选择“C/C++"选项卡,"分类”下拉框选择:
codegeneration,在“userun-time
library"中选择”Multi-threadedDLL“最后确定。
⑷选择【工具】-->【选项】--》"目录"选项卡
在”目录“下拉框中选择"IncludeFiles"然后新增一项C:
\FLTK(导入头文件)
⑸在“目录“下拉框中选择"LibraryFiles”然后新增一项C:
\FLTK(导入类库)
(6)编译运行hello.cxx
1.22ubuntu下搭建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:
~$cdFLTKxhy@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=newFI_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=newFI_Box(20,40,260,100,"Hello,World!
");
下一步,我们设置了box的类型,大小,字体和标签的类型
box->box(FL_UP_BOX);
box->labelsize(36);
1.3FLTK构件简介
FLTK作为GUI开发包,包含了常用的图形用户接口需要的一些构件,视觉表现非常丰富,如
下两图所示:
常用按钮构件
按钮名称
头文件
按钮名称
头文件
FlButton
—
FIButton.H
FICheckButton
FICheckButton.H
FILightButton
FILightButton.H
FIRepeatButtonF
RepeatButton.H
FI_Return_ButtonF
_Return_Button.Hf|_
RoundButton
FIRoundButton.H
对于具有FI_Check_Button、FI_Loght_Button和FI_Round_Button当状态为off时value()=0,On时value()返回1。
处理按钮时间可以使用回调(callback)函数,参见后面的事件处理。
文本处理构件
构件名称
头文件
构件名称
头文件
FlInput
Fl」nput.H
FlOutput
FlOutput.H
FlMultilineInputF
MultilineInput.HFl
MultilineoutputFlM
iltilineoutput.H
设置和取得文本内容使用value();
如:
(newFI_Input(x,y,width,height,"LabeI"))->vaIue("HeIIoWorld!
");
其他构件参见FLTK.org的文档说明。
写一个简单的FLTK程序
#include
#include
#include
intmain(intargc,char**argv)
{
Fl_Window*window=newFl_Window(300,180);
Fl_Box*box=newFI_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=newFI_Box(20,40,260,100,"Hello,World!
");
下一步,我们设置了box的类型,大小,字体和标签的类型
box->box(FL_UP_BOX);
box->labelsize(36);
box->labelfont(FL_BOLD+FL_ITALIC);
box->IabeItype(FL_SHADOW_LABEL);
最后,我们显示该窗口并进入FLTK事件循环
window->end();
window->show(argc,argv);
returnFl:
:
run();
运行该程序得到的界面如下,你能直接关闭该窗口退出,也可以按ESC键退出
1.4FLTK事件处理
对于一般构件的如按钮,菜单等常用事件的处理一般可以使用回调函数实现,回调函数的原型是:
voidXXX_caIIback(FI_Widget*w,void*data)
{一一
//添加自己处理的内容
}
使用F1_Widget->callback(XXX_caIIback,data)注册回调函数
/***************************************************************
按钮事件例子
***************************************************************/
#include
#include
#include
#include
voidBtnO1_cb(FI_Widget*w,void*data)
{一一
((Fl_Button*)w)->label((char*)data);fl_alert("Hello");
}
intmain(intargc,char**argv)
{
char*buff="Hello";
Fl_Window*w=newFl_Window(272,144);
Fl_Button*BtnOI=newFl_Button(85,50,105,25,"&Testcallback");
Btn01->shortcut(FL_ALT+'t');//定义按钮的快捷键
BtnO1->callback((FI_Callback*)BtnO1_cb,buff);//调用处理函数buff作为参数
w->end();
w->show(argc,argv);
returnFl:
:
run();
}
编译运行程序,鼠标点击按钮,按钮标签会发生改变,并且会弹出提示框。
通常的callback是当构件的value改变时调用,可以使用when()改变为其他事件发生调用回调函数,主要事件有以下事件
事件
说明
FLWHENNERVER
从不调用回调函数
FLWHENCHANGED
当构件值改变时调用
FL_WHEN_RELEASE
当释放按键或者鼠标并且构件值改变
FL_WHEN_RELEASE_ALWAYS
当释放按键或者鼠标,即使构件值没有改变
FLWHENENTERKEY
按下Enter键并且构件值改变
FLWHENENTERKEYALWAYS
————
按下Enter键,即使构件值没有改变
通过使用F1_Widget->when(FL_WHEN_XXX来改变回调事件。
#include
#include
#include
#include
voidBtnO1_cb(FI_Widget*w,void*data)
{一一fl_alert("Hello");
}
intmain(intargc,char**argv)
{
char*buff="Hello";
Fl_Window*w=newFl_Window(272,144);
Fl_Button*BtnO1=newFl_Button(85,5O,1O5,25,"&Testcallback");BtnO1->shortcut(FL_ALT+'t');
BtnO1->callback((FI_Callback*)BtnO1_cb,buff);
Btn01->when(FL_WHEN_RELEASE_ALWAYS);
w->end();
w->show(argc,argv);
returnFl:
:
run();
}
编译运行程序,在按钮上按下鼠标左键,移动到按钮外,松开鼠标按键,仍然会弹出对话框,对比上面的两程序,看看有什么不同。
1.5FLTK消息处理
在FLTK中是通过FI_Widegt:
:
handle(),虚拟函数来处理系统的消息。
我们可以查看Fltk的
源代码来分析系统是怎样处理一些系统消息的,如按钮的消息处理
/*******************************************************
Fl_Button中处理消息的代码,省略了具体的处理代码
*******************************************************/
intFl_Button:
:
handle(intevent){
switch(event)
{
caseFL_ENTER:
caseFL_LEAVE:
return1;
caseFL_PUSH:
……
caseFL_DRAG:
caseFL_RELEASE:
……
caseFL_SHORTCUT:
……
caseFL_FOCUS:
……
caseFL_UNFOCUS:
……
caseFL_KEYBOARD:
……default:
return0;
}
}
可以看出了,系统的一些消息,都是在构件的handle()中进行处理的。
系统的主要消息有以下
鼠标事件消息
焦点事件消息
FLPUSH
FLENTER
FLDRAG
FLLEAVE
FLRELEASE
FLFOCUS
FLMOVE
FLUNFOCUS
键盘事件消息
剪贴板事件消息
FLKEYBOARD
FLPASTE
FLSHORTCUT
FLSELECTIONCLEAR
构件事件消息
FLDEACTIVATE
FLACTIVE
FLHIDE
FLSHOW
通过重载handle函数我们可扩充标准构件,下面是一个鼠标移动到上面就改变颜色的按钮的实现源代码。
#include
#include
#include
#include
classEnterButton:
publicFl_Button
{_
inthandle(inte)
{
switch(e)
{
caseFL_ENTER:
color(FL_GREEN);labelsize(18);
redraw();
return1;
caseFL_LEAVE:
color(FL_GRAY);labelsize(18);
redraw();return1;
default:
returnFl_Button:
:
handle(e);
}_
}
public:
EnterButton(intx,inty,intw,inth,constchar*l):
Fl_Button(x,y,w,h,l){}};staticvoidcb(Fl_Widget*s,void*data)
{_
fl_alert("HelloWorld!
");
}
intmain(intargc,char**argv)
{
Fl_Window*w=newFl_Window(130,50);
EnterButton*eBtn=newEnterButton(25,50,120,25,"HelloWorld");eBtn->callback((FI_Callback*)cb);
w->end();
w->show(argc,argv);returnFl:
:
run();
}
运行显示效果如图:
Linux下演示[截屏时鼠标没有取到]
1.6OpenGL编程
在FLTK中很容易使用OpenGL进行图形编程的,我们只需要使用它的FI_GI_Window构件,重新定义一个派生于FI_GI_Window的类,重载draw()和handle()就可以。
所需要的代码和步骤如下:
1.包含以下头文件
#include
#include
#include
2.定义一个子类,如下代码所示
classMYGLWindow:
publicFI_GI_Window
{
voiddraw();//作图操作
voidhandle(int);//消息事件处理
public:
MYGLWindow(intx,inty,intw,inth,constchar*L):
FI_GI_Window(x,y,w,h,L){};
};
3.实现draw()事件
voidMYGLWindow:
:
draw()//作图
{
if(!
valid())
{
//设置viewport窗口大小等等例如/**********************************************valid
(1);
glLoadldentity();glViewport(0,0,w(),h());
***********************************************/
}
〃添加使用OPENGL作图操作
};
4.事件处理实现
voidMYGLWindow:
:
handle(intevent)//事件处理{
switch(event)
{
caseFL_PUSH:
//操作等
return1;
case
}
}
注意
1.编译时需要包含openGL32的库文件,名字在不同的平台名字稍微不同。
2.使用<FL/gI.h>代替<GL/gI.h>头文件,不要使用后者的头文件。
例子程序比较长,附在参考中。
运行显示,弹出菜单后如图所示:
第二章:
常用的控件和属性
这章将描述FLTK提供的控件,并介绍如何得到和设置控件的标准属性。
2.1按钮
普通按钮
带有选择框的按钮带有指示灯的按钮
FLTK提供了很多类型的按钮
FI_Button
FI_Check_Button
能被Enter激活的按钮带有圆形选择框的按钮
FI_Light_ButtonFI_Repeat_Button
FI_Return_Button
Fl_Round_Button
每一个按钮都需要相应的
构造函数包含了控件的位置,大小和可选的标签
FI_Button*button=newFI_Button(x,y,width,height,"label");
FI_Light_Button*lbutton=newFI_Light_Button(x,y,width,height);
FI_Round_Button*rbutton=newFI_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
2.2文本
FLTK提供了几种文本控件来显示和接收文本信息
输入单行的文本
输出单行的文本多行文本输入框
多行文本输出框显示多行文本控件多行文本编辑控件显示HTML文本控件
控件允许互相copy,但是不能改变
Fl」nput
FI_Output
FI_MuItiIine_lnput
FI_MuItiIine_Output
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fltk 中文 手册