雙態按鈕由一般按鈕衍生而來,並且非常相似,只是雙態按鈕有兩個狀態,通過點擊可以切換。它們可以是被按下的(depressed),當你再點擊一下,他們會彈起來。再點擊一下,它們又會再彈下去。
雙態按鈕是複選按鈕和單選按鈕的基礎,所以單選按鈕和複選按鈕繼承了許多雙態按鈕的函式呼叫。我會在講到它們時指出這些來。
創建一個新的雙態按鈕:
GtkWidget *gtk_toggle_button_new( void ); GtkWidget *gtk_toggle_button_new_with_label( const gchar *label ); GtkWidget *gtk_toggle_button_new_with_mnemonic( const gchar *label ); |
你可以猜到,創建雙態按鈕應該和一般按鈕元件相同。第一個函式是創建一個空白的雙態按鈕,後面兩個函式創建帶標籤的雙態按鈕。其中 _mnemonic() 函式是跟其前面有_lable的函式的變形。
我們是通過讀取雙態元件 (包括單選和複選按鈕) 結構的 active 域,來檢測雙態按鈕的狀態。之前要用 GTK_TOGGLE_BUTTON 巨集把元件指標轉換為雙態元件指標。我們關心的各種雙態按鈕 (雙態按鈕,複選按鈕,和單選按鈕元件) 的信號是 “toggled” 信號。為了檢測這些按鈕的狀態,設置一個處理函式以捕獲 “toggled” 信號,並且通過讀取結構測定它的狀態。該回呼函式如下:
void toggle_button_callback (GtkWidget *widget, gpointer data) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { /* 如果執行到這裡,雙態按鈕是按下的 */ } else { /* 如果執行到這裡,雙態按鈕是彈起的 */ } } |
設置雙態按鈕和它的子類別 (即單選和複選按鈕) 的狀態,用如下函式:
void gtk_toggle_button_set_active( GtkToggleButton *toggle_button, gboolean is_active ); |
上面的呼叫可以用來設置開關按鈕,以及它的子類別單選和複選按鈕的狀態。將你所創建的按鈕作為第一個參數傳入,以及一個 TRUE 或 FALSE 值作為第二個狀態參數來指定它應該是下 (按下) 還是上 (彈起)。預設是上,即 FALSE。
注意,當你使用 gtk_toggle_button_set_active() 函式,並且狀態也實際改變了時,它會導致按鈕發出 “clicked” 和 “toggled” 信號。
gboolean gtk_toggle_button_get_active (GtkToggleButton *toggle_button); |
傳回值是雙態按鈕的當前狀態。
1 則留言