測試博客

 

  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,因此,即使窗口被關閉,程序也不會停止。點擊關閉圖標,可以看到並沒有返回命令提示符。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章