测试博客

 

  
  
  
  
  1. #include <gtk/gtk.h> 
  2. #include <stdio.h> 
  3.  
  4. GtkWidget *togglebutton; 
  5. GtkWidget *checkbutton; 
  6. GtkWidget *radiobutton1, *radiobutton2; 
  7.  
  8. void window_quit(GtkWidget *window, gpointer usr_data) 
  9.      gtk_main_quit(); 
  10.  
  11. void add_widget_with_label(GtkContainer *container, const gchar *caption,  
  12.                            GtkWidget *widget) 
  13.      GtkWidget *label = gtk_label_new(caption); 
  14.      GtkWidget *hbox = gtk_hbox_new(TRUE, 4); 
  15.  
  16.      gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4); 
  17.      gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 4); 
  18.      gtk_container_add(container, hbox); 
  19.  
  20. void print_active(GtkToggleButton *button, const gchar *button_name) 
  21.      gboolean active = gtk_toggle_button_get_active(button); 
  22.  
  23.      printf("%s is %s\n", button_name, active?"active":"not active"); 
  24.  
  25. void button_clicked(GtkWidget *button, gpointer usr_data) 
  26.      print_active(GTK_TOGGLE_BUTTON(togglebutton), "Togglebutton"); 
  27.      print_active(GTK_TOGGLE_BUTTON(checkbutton), "Checkbutton"); 
  28.      print_active(GTK_TOGGLE_BUTTON(radiobutton1), "Radiobutton1"); 
  29.      print_active(GTK_TOGGLE_BUTTON(radiobutton2), "Radiobutton2"); 
  30.      printf("\n"); 
  31.  
  32. gint main(gint argc, gchar *argv[]) 
  33.      GtkWidget *window; 
  34.      GtkWidget *button; 
  35.      GtkWidget *vbox; 
  36.  
  37.      gtk_init(&argc, &argv); 
  38.       
  39.      window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
  40.      gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); 
  41.      gtk_window_set_title(GTK_WINDOW(window), "button"); 
  42.       
  43.      g_signal_connect(GTK_OBJECT(window), "destroy"
  44.                   GTK_SIGNAL_FUNC(window_quit), NULL); 
  45.  
  46.      button = gtk_button_new_with_label("OK"); 
  47.      togglebutton = gtk_toggle_button_new_with_label("Toggle"); 
  48.      checkbutton = gtk_check_button_new(); 
  49.      radiobutton1 = gtk_radio_button_new(NULL); 
  50.      radiobutton2 = gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(radiobutton1)); 
  51.      vbox = gtk_vbox_new(TRUE, 4); 
  52.  
  53.      add_widget_with_label(GTK_CONTAINER(vbox), "Toggle button:"
  54.                        togglebutton); 
  55.      add_widget_with_label(GTK_CONTAINER(vbox), "Check button:"
  56.                        checkbutton); 
  57.      add_widget_with_label(GTK_CONTAINER(vbox), "Radio button1:"
  58.                        radiobutton1); 
  59.      add_widget_with_label(GTK_CONTAINER(vbox), "Radio button2:"
  60.                        radiobutton2); 
  61.      add_widget_with_label(GTK_CONTAINER(vbox), "Button:"
  62.                        button); 
  63.       
  64.      g_signal_connect(GTK_OBJECT(button), "clicked"
  65.                   GTK_SIGNAL_FUNC(button_clicked), NULL); 
  66.  
  67.      gtk_container_add(GTK_CONTAINER(window), vbox); 
  68.      gtk_widget_show_all(window); 
  69.  
  70.      gtk_main(); 
  71.      return 0; 

 

  
  
  
  
  1. 1.一个空白的GtkWindow 
  2.   (1)输入代码,保存为gtk1.c: 
  3.  
  4. #include <gtk/gtk.h> 
  5.  
  6. int main(int argc, char *argv[]) 
  7.      GtkWidget *window; 
  8.  
  9.      gtk_init(&argc, &argv); 
  10.      window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
  11.      gtk_widget_show(window); 
  12.      gtk_main(); 
  13.  
  14.      return 0; 
  15.  
  16.   (2)编译运行gtk1.c 
  17.   $ gcc gtk1.c -o gtk1 `pkg-config --cflags --libs gtk+-2.0` 
  18.   $ ./gtk1 
  19.   可以看到一个窗口弹出来。 
  20.  
  21. 2.解析 
  22.   #include <gtk/gtk.h>包含必需的GTK+库和相关库(包括GLib)的头文件。 
  23.   GtkWidget *window; 声明窗口为一个指向GtkWidget的指针。 
  24.   为了初始化GTK+库,你必须调用gtk_init函数,将命令行参数argc和argv传递给它。这给了GTK+一个 
  25. 机会来解析它需要知道的任何命令行参数。注意:必须在调用任何GTK+函数之前对其进行这样的初始化。 
  26.   核心代码是对gtk_window_new的调用,函数原型: 
  27.   GtkWidget* gtk_window_new(GtkWindowType type); 
  28.   参数type根据窗口的目的可取下面两个值之一。 
  29.     GTK_WINDOW_TOPLEVEL: 一个标准的有框架窗口。 
  30.     GTK_WINDOW_POPUP: 一个适用于对话框的无框架窗口。 
  31.   几乎可以总使用GTK_WINDOW_TOPLEVEL,因为还有更方便的创建对话框的方法。 
  32.   gtk_window_new调用在内存中建立窗口,使得在将窗口实际显示在屏幕之前,有机会在它的里面放置构件,调整它的大小,改变窗口的标题等。要实际显示窗口,需要调用gtk_window_show: 
  33.   gtk_window_show(window); 
  34.   该函数需要一个GtkWidget指针,因此只需把窗口的引用传给它即可。 
  35.   最后调用的函数是gtk_main。这个关键函数通过把控制权交给GTK+来启动交互过程,并且一直运行,直到调用gtk_main_quit才返回。gtk1.c并未调用gtk_main_quit,因此,即使窗口被关闭,程序也不会停止。点击关闭图标,可以看到并没有返回命令提示符。 

 

你可能感兴趣的:(职场,休闲,gtk)