## 4.4畫控件
當FLTK需要重畫控件時將調用虛擬函數draw().只有在damage()返回非0值時調用該函數,draw()返回后,damage()被清0。Draw()應該被聲明為保護成員函數,避免在不需要寫畫圖代碼時用到。
Damage()將包含從最后一次調用draw()后damage(n)調用產生的所有與或位信息,根據該信息只重畫需要重畫的位置,只有FLTK認為需要全部重畫時才打開FL_DAMAGE_ALL位,比如收到expose事件。
### 修改控件的尺寸
resize(int x,int y,int w,int h)在控件被移動和改變大小時被調用,這些參數分別是新位置,寬度和高度。但是x(),y(),w(),h(),還是以前的值,若要改變這些值,必須在基類中也調用resize()函數
不需要調用redraw()函數,至少只改變x(),y()時不需要,因為一個組合控件有一套更有效的方法來畫新的位置
### 如何制作一個組合控件
一個組合控件包括一個或多個子控件。制作組合控件必須繼承Fl_Group類.不繼承Fl_Group類當然也可能可以制作一個組合控件,但是你還是要重新寫Fl_Group類里面的工作
子控件可能在類里面聲明
```
class MyClass : public Fl_Group
{
Fl_Button the_button;
Fl_Slider the_slider;
...
};
```
構造函數要初始化這些子控件。他們將被自動的add()到group中。因為Fl_Group構造函數調用了begin().在構造函數中不要忘記調用end()函數
```
MyClass::MyClass(int x, int y, int w, int h) :
Fl_Group(x, y, w, h),
the_button(x + 5, y + 5, 100, 20),
the_slider(x, y + 50, w, 20)
{
...(you could add dynamically created child widgets here)...
end(); // don't forget to do this!
}
```
- 第一章:FLTK編程模型
- 1.1FLTK功能簡介
- 1.2搭建FLTK開發環境
- 1.3FLTK構件簡介
- 1.4FLTK事件處理
- 1.5FLTK消息處理
- 1.6OpenGL編程
- 第二章:常用的控件和屬性
- 2.1按鈕
- 2.2文本
- 2.3顏色
- 2.4Box類型
- 第三章:FLTK的畫圖函數
- 3.1何時可以畫圖
- 3.2 FLTK的畫圖函數
- 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畫控件