这章将描述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
Valuators用来显示数字轨迹信息 Fl_Counter 带有箭头按钮的控件显示当前值 Fl_Dial 圆形手柄 Fl_Roller Fl_Scrollbar 滚动条控件 Fl_Slider 带有手柄的滑块 Fl_Value_Slider显示当前值的滑块
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);
Box类型Fl_Boxtype的类型在<Enumeration.H>中定义,可以用Fl_Widget::box()设置和得到。图3-3显示了标准的box类型。
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会减去相应的偏移量 标签和标签类型
回调函数
快捷键
|
|