gtk3示例--buttonbox

2020-01-14 14:30:08 浏览数 (3)

代码语言:javascript复制
#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;
 }
 

0 人点赞