gtk3示例–buttonbox

  • 2020 年 1 月 14 日
  • 筆記

#include <gtk/gtk.h>     static void   print_hello (GtkWidget *widget, gpointer data)   {       g_print("你按的是确定键n");   }     static void   print_cancel (GtkWidget *widget, gpointer data)   {       g_print("你按的是取消键n");   }     static void   print_help (GtkWidget *widget, gpointer data)   {       g_print ("你按的是帮助键n");   }     static GtkWidget *   create_bbox (gint  horizontal,                char *title,                gint  spacing,                gint  layout)   {     GtkWidget *frame;     GtkWidget *bbox;     GtkWidget *button;       frame = gtk_frame_new (title);       if (horizontal)       bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);     else       bbox = gtk_button_box_new (GTK_ORIENTATION_VERTICAL);       gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);     gtk_container_add (GTK_CONTAINER (frame), bbox);       gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);     gtk_box_set_spacing (GTK_BOX (bbox), spacing);       button = gtk_button_new_from_stock (GTK_STOCK_OK);     g_signal_connect (button, "clicked", G_CALLBACK(print_hello), NULL);     gtk_container_add (GTK_CONTAINER (bbox), button);       button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);     g_signal_connect (button, "clicked", G_CALLBACK(print_cancel), NULL);     gtk_container_add (GTK_CONTAINER (bbox), button);       button = gtk_button_new_from_stock (GTK_STOCK_HELP);     g_signal_connect (button, "clicked", G_CALLBACK(print_help), NULL);     gtk_container_add (GTK_CONTAINER (bbox), button);       return frame;   }     GtkWidget *   do_button_box (GtkWidget *do_widget)   {     static GtkWidget *window = NULL;     GtkWidget *main_vbox;     GtkWidget *vbox;     GtkWidget *hbox;     GtkWidget *frame_horz;     GtkWidget *frame_vert;       if (!window)     {       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);       gtk_window_set_screen (GTK_WINDOW (window),                              gtk_widget_get_screen (do_widget));       gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");         g_signal_connect (window, "destroy",                         G_CALLBACK (gtk_widget_destroyed),                         &window);         gtk_container_set_border_width (GTK_CONTAINER (window), 10);         main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);       gtk_container_add (GTK_CONTAINER (window), main_vbox);         frame_horz = gtk_frame_new ("Horizontal Button Boxes");       gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);         vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);       gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);       gtk_container_add (GTK_CONTAINER (frame_horz), vbox);         gtk_box_pack_start (GTK_BOX (vbox),                           create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),                           TRUE, TRUE, 0);         gtk_box_pack_start (GTK_BOX (vbox),                           create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),                           TRUE, TRUE, 5);         gtk_box_pack_start (GTK_BOX (vbox),                           create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),                           TRUE, TRUE, 5);         gtk_box_pack_start (GTK_BOX (vbox),                           create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),                           TRUE, TRUE, 5);         frame_vert = gtk_frame_new ("Vertical Button Boxes");       gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);         hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);       gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);       gtk_container_add (GTK_CONTAINER (frame_vert), hbox);         gtk_box_pack_start (GTK_BOX (hbox),                           create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),                           TRUE, TRUE, 0);         gtk_box_pack_start (GTK_BOX (hbox),                           create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),                           TRUE, TRUE, 5);         gtk_box_pack_start (GTK_BOX (hbox),                           create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),                           TRUE, TRUE, 5);         gtk_box_pack_start (GTK_BOX (hbox),                           create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),                           TRUE, TRUE, 5);     }       if (!gtk_widget_get_visible (window))       {         gtk_widget_show_all (window);       }     else       {         gtk_widget_destroy (window);         window = NULL;       }       return window;   }       int   main(int argc, char **argv)   {       GtkWidget *do_window = NULL;       gtk_init(&argc, &argv);       do_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);       do_window = do_button_box (do_window);       g_signal_connect(GTK_WINDOW(do_window), "destroy",  gtk_main_quit, NULL );         //gtk_widget_show(do_window);       gtk_main();       return 0;   }