首頁>技術>

在這一節中將介紹如何建立和使用下拉列表框控制元件。與列表框不同的是下拉列表框控制元件(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來設定下拉列表框的活動項為索引項。

22
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • JavaScript 真的是面向物件的語言嗎?