以前我想实现checkbutton列表,并且底色为白色。结果找了大半天也只找到GtkCList,但它只能加入text。
现在做其他东西时看到了GtkList,原来这个控件功能很强大,几乎可以加入任何其他控件,checkbutton也就不在话下了。不过它只能加入一列控件,而GtkCList加入文本时是可以有多列的。
#include <stdlib.h>
#include <gtk/gtk.h>
#define COLUMN 1
GtkWidget *PackStartLabel(GtkWidget *box, const gchar *text)
{
GtkWidget *label;
label = gtk_label_new(text);
gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
gtk_widget_show(label);
return label;
}
int main (int argc, char *argv[])
{
gint i;
gchar buf[50];
GtkWidget *win = NULL;
GtkWidget *vbox = NULL;
GtkWidget *gtklist;
GtkWidget *list_item;
GtkWidget *check;
GList *dlist = NULL;
GtkWidget *clist;
gchar *text[COLUMN];
/* Initialize GTK+ */
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
gtk_init (&argc, &argv);
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
/* Create the main window */
win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width (GTK_CONTAINER (win), 8);
gtk_window_set_title (GTK_WINDOW (win), "Check box list demo");
gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
gtk_widget_set_usize(win, 300, 300);
gtk_widget_realize (win);
g_signal_connect (win, "destroy", gtk_main_quit, NULL);
vbox = gtk_vbox_new (TRUE, 6);
gtk_container_add (GTK_CONTAINER (win), vbox);
PackStartLabel(vbox, "GtkList");
/* Cretate gtklist */
gtklist = gtk_list_new();
gtk_box_pack_start(GTK_BOX(vbox), gtklist, FALSE, FALSE, 0);
// Create list_item with checkbutton, and add list_item to gtklist
// GtkList nearly can add any widgets
for(i = 0; i < 2; ++i)
{
sprintf(buf, "channel%d",i);
check = gtk_check_button_new_with_label(buf);
list_item = gtk_list_item_new();
gtk_container_add(GTK_CONTAINER(list_item), check);
gtk_container_add(GTK_CONTAINER(gtklist), list_item);
}
// use GList to add list_items to gtklist
for(i = 2; i < 4; ++i)
{
sprintf(buf, "test%d",i);
list_item = gtk_list_item_new_with_label(buf);
dlist = g_list_append(dlist, list_item);
}
gtk_list_append_items(GTK_LIST(gtklist), dlist);
PackStartLabel(vbox, "GtkCList");
// create clist with lables
// GtkCList can only add lables
clist = gtk_clist_new (1);
gtk_box_pack_start(GTK_BOX(vbox), clist, FALSE, FALSE, 0);
for(i = 0; i < 2; ++i)
{
sprintf(buf,"test%d",i);
text[0] = buf;
gtk_clist_append (GTK_CLIST(clist),text);
}
/* Enter the main loop */
gtk_widget_show_all (win);
gtk_main ();
return 0;
}