在這一節中將介紹如何建立和使用下拉列表框控制元件。與列表框不同的是下拉列表框控制元件(GtkComboBox)容器佔用的螢幕控制元件比較小,它多數用在多選一的情況下,這一點與我們之前介紹的選單相同。
下面我們來看一下如何使用GTkComboBox。程式碼如下:
#include <gtk/gtk.h>
void combo_selected(GtkWidget *widget,gpointer window)
{
gchar * string = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
g_print("選擇了第%s項\n",string);
}
int main(int argc, char * argv[])
{
GtkWidget *window;
GtkWidget *combo;
GtkWidget *vbox;
GtkWidget *label;
gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
gtk_window_set_title(GTK_WINDOW(window),"下拉列表框");
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window),20);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
gtk_container_add(GTK_CONTAINER(window),vbox);
label = gtk_label_new("請選擇下列中的一項:");
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,5);
combo = gtk_combo_box_text_new();
gtk_box_pack_start(GTK_BOX(vbox),combo,FALSE,FALSE,5);
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combo),"列表項 A");
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combo),"列表項 B");
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combo),"列表項 C");
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combo),"列表項 D");
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combo),"列表項 E");
g_signal_connect(G_OBJECT(combo),"changed",G_CALLBACK(combo_selected),(gpointer)label);
gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
執行結果
程式碼分析:
(1)建立下拉列表框
可以使用函式gtk_combo_box_text_new來建立下拉列表框控制元件,它是一個只顯示字串的下拉列表框。事實上下拉列表框是由一個文字錄入控制元件、一個箭頭控制元件和一個列表框組合而成的,這幾個控制元件之間的關係處理得非常協調。正常情況下箭頭是可以啟用的,即按下後彈出列表框,使用者可用函式來設定這一屬性。
(2)向下拉列表框中輸入資料項
可以使用函式gtk_combo_box_text_append_text來向下拉列表框中新增資料項,這裡下拉列表框有五個選項。標籤中的內容就是我們選擇的那個選項的內容。
使用gtk_combo_box_text_get_active_text函式來返回獲得當前最新啟用選項所對應的內容,如果沒有選擇,則返回NULL。
使用函式gtk_combo_box_set_active來設定下拉列表框的活動項為索引項。