gtk3示例--buttonbox

发布时间:2019-07-15 10:49:39编辑:auto阅读(1391)

    #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;
    }
     

关键字