第三章常用的控制項和屬性
第三章常用的控制項和屬性
這章將描述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顯示當前值的滑塊
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);
Box類型
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會減去相應的偏移量
標籤和標籤類型回調函數快捷鍵
推薦閱讀:
※如何正確控制飲食
※重度糖尿病患者怎樣控制血糖?
※求助無人機飛控開發的流程,所需環境及軟體等?
※淺談打擊「大戶控制小戶」的幾點體會
※電子控制懸架的簡介