範圍元件本質上來說都是相當複雜的,不過,像所有「基本類別」元件一樣,絕大部分複雜性只有當你想徹底瞭解它時才吸引人。同樣,幾乎所有它定義的函式和信號都只在用它們寫衍生元件時才真正用到。然而,在<gtk/gtkrange.h>中還是有一些很有用的函式,它們對所有範圍元件都起作用。
設置更新方式
範圍元件的「更新方式」定義了用戶與元件互動時在調整物件上改變調整物件的value值欄位,以及如何引發 “value_changed” 信號的時點。更新方式在<gtk/gtkenums.h>中定義為enum GtkUpdateType型別,有以下取值:
- GTK_UPDATE_CONTINUOUS
- 這是預設值。”value_changed” 信號是連續引發,例如,每當滾軸移動,甚至移動最小數量時都會引發。
- GTK_UPDATE_DISCONTINUOUS
- 只有滾軸停止移動,用戶釋放滑鼠鍵時才引發 “value_changed” 信號。
- GTK_UPDATE_DELAYED
- 當用戶釋放滑鼠鍵,或者滾軸短期停止移動時才引發 “value_changed” 信號。
範圍元件的更新方式可以用以下方法設置:用GTK_RANGE(widget)巨集將元件轉換,並將它傳遞給這個函式:
void gtk_range_set_update_policy( GtkRange *range, GtkUpdateType policy); |
獲得和設置調整物件
猜得出,用以下函式”快速”取得和設置調整物件:
GtkAdjustment* gtk_range_get_adjustment( GtkRange *range ); void gtk_range_set_adjustment( GtkRange *range, GtkAdjustment *adjustment ); |
gtk_range_get_adjustment()傳回一個指向range所連接的調整物件的指標。
如果將range正在使用的調整物件傳遞給gtk_range_set_adjustment()函式,什麼也不會發生,不管是否改變了其內部的值。如果是將一個新的調整物件傳遞給它,它會將舊的調整物件(如果存在)解除引用(unreference)(可能會銷毀它),將適當的信號連接到新的調整物件,並且呼叫私有函式gtk_range_adjustment_changed(),該函式將(或至少假裝會…)重新計算滾軸的尺寸和/或位置,並在需要時重新繪出該元件。正如在調整物件部分所提到的,如果想重新使用同一個調整物件,當直接修改它的值時,應該引發一個 “changed” 信號給它,像這樣:
g_signal_emit_by_name (G_OBJECT (adjustment), "changed"); |
1 則留言