本節將介紹如何建立和使用滾動按鈕控制元件,設定滾動按鈕控制元件的屬性來進行數字選擇。數值調節按鈕控制元件(GtkSpinButton)是最常用的數字選擇控制元件,GtkSpinButton是允許使用者設定某些屬性值的理想方式。GtkSpinButton允許使用者單擊兩個箭頭中的一個來增加或減少顯示的值,而不必直接在GtkEntry中鍵入數字。仍然可以輸入一個值,並且可以檢查它以確保它在給定的範圍內。它可以根據設定來顯示並供使用者選擇整數或浮點數,還可以組合成其他控制元件。
/*數字選擇*/
#include <gtk/gtk.h>
int main(int argc, char * argv[])
{
GtkWidget * window;
GtkWidget * vbox;
GtkWidget * frame;
GtkWidget * spin;
GtkWidget * label;
GtkWidget * vvbox;
GtkWidget * hbox, *vbox1, *vbox2, * vbox3;
GtkAdjustment * adj1;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
frame = gtk_frame_new("類似一個日曆");
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_container_add(GTK_CONTAINER(frame), hbox);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 10);
vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox1, TRUE, TRUE, 5);
label = gtk_label_new("年:");
gtk_box_pack_start(GTK_BOX(vbox1), label, FALSE, FALSE, 5);
spin = gtk_spin_button_new_with_range(1990, 2100,1);
gtk_box_pack_start(GTK_BOX(vbox1), spin, FALSE, FALSE, 5);
vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 5);
label = gtk_label_new("月:");
gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 5);
spin = gtk_spin_button_new_with_range(1, 12,1);
gtk_box_pack_start(GTK_BOX(vbox2), spin, FALSE, FALSE, 5);
vbox3 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox3, TRUE, TRUE, 5);
label = gtk_label_new("日:");
gtk_box_pack_start(GTK_BOX(vbox3), label, FALSE, FALSE, 5);
spin = gtk_spin_button_new_with_range(1, 31,1);
gtk_box_pack_start(GTK_BOX(vbox3), spin, FALSE, FALSE, 5);
frame = gtk_frame_new(NULL);
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);
vvbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(frame), vvbox);
gtk_container_set_border_width(GTK_CONTAINER(vvbox), 10);
adj1 = gtk_adjustment_new(50.0, 0.0, 100.0, 1.0, 5.0, 5.0);
spin = gtk_spin_button_new(adj1, 5, 1);
gtk_box_pack_start(GTK_BOX(vvbox), label, FALSE, FALSE, 3);
gtk_box_pack_start(GTK_BOX(vvbox), spin, FALSE, FALSE, 3);
spin = gtk_spin_button_new_with_range(0, 9.9, 0.1);
gtk_box_pack_start(GTK_BOX(vvbox), label, FALSE, FALSE, 3);
gtk_box_pack_start(GTK_BOX(vvbox), spin, FALSE, FALSE, 3);
gtk_widget_show_all(window);
gtk_main();
return FALSE;
}
執行結果:
執行結果
程式碼分析:
有兩個函式可以建立滾動按鈕;一個是建立滾動按鈕的函式是gtk_spin_button_new_with_range,它也有 3 個引數,第 1 個引數是最小值,第 2 個引數是最大值,第 3 個引數是每次增長的值。另一個是 gtk_spin_button_new,它有 3 個引數,第 1 個引數是 GtkAdjustment 型別,第 2 個引數是滾動按鈕每次按下後數字變化的幅度,第 3 個引數是按鈕中文字顯示區域中顯示的數字。
GtkAdjustment物件表示一個值,該值具有關聯的下限和上限、步長和頁面增量以及頁面大小。它在幾個GTK+小部件中使用,包括GtkSpinButton、GtkViewport和GtkRange (GtkScrollbar和GtkScale的基類)。GtkAdjustment物件本身不會更新值。相反,由GtkAdjustment的所有者來控制值。
GtkAdjustment * gtk_adjustment_new (
gdouble value,
gdouble lower,
gdouble upper,
gdouble step_increment,
gdouble page_increment,
gdouble page_size);
引數:
value:初始值
lower :下限的最小值
upper :上限的最大值
step_increment :數值的步長
page_increment 頁面增量
page_size:頁面大小