標籤:

第三章常用的控制項和屬性

第三章常用的控制項和屬性

這章將描述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

  • FL_FOREGROUND_COLOR
  • FL_BACKGROUND_COLOR
  • FL_INACTIVE_COLOR
  • FL_SELECTION_COLOR
  • 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會減去相應的偏移量

    標籤和標籤類型回調函數快捷鍵
    推薦閱讀:

    如何正確控制飲食
    重度糖尿病患者怎樣控制血糖?
    求助無人機飛控開發的流程,所需環境及軟體等?
    淺談打擊「大戶控制小戶」的幾點體會
    電子控制懸架的簡介

    TAG:控制 | 控制項 |