fltk中文手册.docx

上传人:b****6 文档编号:7760962 上传时间:2023-01-26 格式:DOCX 页数:21 大小:25.51KB
下载 相关 举报
fltk中文手册.docx_第1页
第1页 / 共21页
fltk中文手册.docx_第2页
第2页 / 共21页
fltk中文手册.docx_第3页
第3页 / 共21页
fltk中文手册.docx_第4页
第4页 / 共21页
fltk中文手册.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

fltk中文手册.docx

《fltk中文手册.docx》由会员分享,可在线阅读,更多相关《fltk中文手册.docx(21页珍藏版)》请在冰豆网上搜索。

fltk中文手册.docx

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

FI_Text_Display

FI_Text_Editor

FI_HeIp_View

FI_OutputandFI_MuItiIine_Output

v/ue()函数用来设置和得到显示的字符串

Fl_lnput*input=newFl_lnput(x,y,width,height,"label");

input->vaIue("Nowisthetimeforallgoodmen...");

这个字符串将被拷贝到该控件的存储空间内,当用value()设置后

FI_Text_DispIayandFI_Text_Editor用FI_Text_Buffer来设置他的值,而不是一个简单的字符串~~~~

Valuators

用来显示数字轨迹信息带有箭头按钮的控件显示当前值圆形手柄

Valuators

FI_Counter

FI_DiaI

FI_RoIIer

滚动条控件带有手柄的滑块

显示当前值的滑块

FI_ScroIIbar

FI_SIider

FI_Value_Slider

Figure3-2:

FLTKvaluatorwidgets

value()函数得到和设置控件的当前值,minimum()和maximum()设置了控件的范围

群Groups

FI_Group控件被用来做一般的容器控件。

除了单选按钮群以外,还被用来形成windows,tabs,scrolledwindows等控件。

一下是FLTK提供的群类。

Fl_Double_WindowFl_Gl_WindowFl_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1