这章将描述FLTK提供的控件,并介绍如何得到和设置控件的标准属性。
FLTK提供了很多类型的按钮
Fl_Button 普通按钮
Fl_Check_Button 带有选择框的按钮
Fl_Light_Button 带有指示灯的按钮
Fl_Repeat_Button
Fl_Return_Button 能被Enter激活的按钮
Fl_Round_Button 带有圆形选择框的按钮
图3-1 FLTK 按钮控件
每一个按钮都需要相应的<FL/Fl_xyz_Button.H>头文件。构造函数包含了控件的位置,大小和可选的标签
Fl_Button *button = new Fl_Button(x, y, width, height, "label");
Fl_Light_Button *lbutton = new Fl_Light_Button(x, y, width, height);
Fl_Round_Button *rbutton = new Fl_Round_Button(x, y, width, height, "label");
每一个按钮可以设置自己的类型用type(),通过这个设置,可以让一个按钮为push button, toggle button, or radio button:
button->type(FL_NORMAL_BUTTON);
lbutton->type(FL_TOGGLE_BUTTON);
rbutton->type(FL_RADIO_BUTTON);
对于toggle和radio按钮,value()函数返回当前的状态,开/关(0代表关,1代表开),set()和clear()分别用来设置和清除togglebutton的状态。Radio Button可以用setonly()打开,同组中的其他Radio button按钮将关闭。
FLTK提供了几种文本控件来显示和接收文本信息
Fl_Input 输入单行的文本
Fl_Output 输出单行的文本
Fl_Multiline_Input 多行文本输入框
Fl_Multiline_Output 多行文本输出框
Fl_Text_Display 显示多行文本控件
Fl_Text_Editor 多行文本编辑控件
Fl_Help_View 显示HTML文本控件
Fl_Output and Fl_Multiline_Output 控件允许互相copy,但是不能改变
Value()函数用来设置和得到显示的字符串
Fl_Input *input = new Fl_Input(x, y, width, height, "label");
input->value("Now is the time for all good men...");
这个字符串将被拷贝到该控件的存储空间内,当用value()设置后
Fl_Text_Display and Fl_Text_Editor 用Fl_Text_Buffer来设置他的值,而不是一个简单的字符串。
Valuators用来显示数字轨迹信息
Fl_Counter 带有箭头按钮的控件显示当前值
Fl_Dial 圆形手柄
Fl_Roller
Fl_Scrollbar 滚动条控件
Fl_Slider 带有手柄的滑块
Fl_Value_Slider显示当前值的滑块
Figure 3-2: FLTK valuator widgets
value()函数得到和设置控件的当前值,minimum()和maximum()设置了控件的范围
群Groups
Fl_Group控件被用来做一般的容器控件。除了单选按钮群以外,还被用来形成windows,tabs,scrolled windows等控件。一下是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
RGB颜色可以用fl_rgb_color()函数设置。
Fl_Color c = fl_rgb_color(80,170,255);
控件的颜色用color()函数设置
button->color(FL_RED);
类似的,标签的颜色用labelcolor()函数设置
button->labelcolor(FL_WHITE);
Fl_Boxtype的类型在<Enumeration.H>中定义,可以用Fl_Widget::box()设置和得到。图3-3显示了标准的box类型。
Figure 3-3: FLTK box types
FL_NO_BOX意思是任何东西都不要画,但仍然是留在窗口上。Fl_ 。。。_FRAME类型只是画边框,中间不做任何改变。如图中蓝色的部分。
制作你自己的Boxtypes
你可以自己制作个性风格的boxtype.通过一个小函数,并将其加到boxtypes的列表中
画图函数
画图函数传递的参数控件的是box的边界和背景颜色
void xyz_draw(int x, int y, int w, int h, Fl_Color c) {
...
}
如一个简单的画图函数填充一个矩形,给定颜色并画一个黑色的外框
void xyz_draw(int x, int y, int w, int h, Fl_Color c) {
fl_color(c);
fl_rectf(x, y, w, h);
fl_color(FL_BLACK);
fl_rect(x, y, w, h);
}
加入自定义的box类型
Fl::set_boxtype函数添加或取代特定的box类型
#define XYZ_BOX FL_FREE_BOXTYPE
Fl::set_boxtype(XYZ_BOX, xyz_draw, 1, 1, 2, 2);
最后4个参数是偏移量,当画该 box时,x,y,w,h会减去相应的偏移量