GTK+ 2.0 教程--改進了的 Hello World

改進了的 Hello World


讓我們來看一下稍微改進了的helloworld和更好的回調函數示例。這裏也要介紹下
一個話題,組裝構件。

 

#include <gtk/gtk.h>

/* 我們新改進的回調函數。向標準輸出(stdout)打印傳遞給該函數的數據。*/
void callback( GtkWidget *widget,
               gpointer   data )
{
    g_print ("Hello again - %s was pressed/n", (gchar *) data);
}

/* 另一個回調函數 */
gint delete_event( GtkWidget *widget,
                   GdkEvent  *event,
                   gpointer   data )
{
    gtk_main_quit ();
    return FALSE;
}

int main( int   argc,
          char *argv[] )
{
    /* GtkWidget 是構件的存儲類型 */
    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *box1;

    /* 這個函數在所有的 GTK 程序都要調用。參數由命令行中解析出來並且送到
該程序中。*/
    gtk_init (&argc, &argv);

    /* 創建一個新窗口 */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    /* 這是一個新的調用,設置窗口標題爲"Hello Buttons!" */
    gtk_window_set_title (GTK_WINDOW (window), "Hello Buttons!");

    /* 在這我們爲delete_event設置了一個處理函數。*/
    g_signal_connect (G_OBJECT (window), "delete_event",
                      G_CALLBACK (delete_event), NULL);

    /* 設置窗口邊框的寬度 */
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);

    /* 我們創建了一個組裝盒。詳情參見“組裝”章節。
     * 我們看不見組裝盒,它僅被作爲排列構件的工具。*/
    box1 = gtk_hbox_new (FALSE, 0);

    /* 把組裝盒放入主窗口中。*/
    gtk_container_add (GTK_CONTAINER (window), box1);

    /* 創建一個標籤爲"Button 1"的新按鈕。*/
    button = gtk_button_new_with_label ("Button 1");
   
    /* 設置回調函數。*/
    g_signal_connect (G_OBJECT (button), "clicked",
                      G_CALLBACK (callback), "button 1");

    /* 我們把按鈕放入不可見的組裝盒,該組合盒已經被放入窗口中。*/
    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);

    /* 我們爲這個按鈕做的準備工作完成了,可以顯示它了。*/
    gtk_widget_show (button);

    /* 同樣創建第二個按鈕。*/
    button = gtk_button_new_with_label ("Button 2");

    /* 以不同的參數調用相同的回調函數,用指向"button 2"的指針代替。*/
    g_signal_connect (G_OBJECT (button), "clicked",
                      G_CALLBACK (callback), "button 2");

    gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);


    /* 顯示的順序並不重要,但我建議最後顯示窗口。這樣它們會同時顯示出來
。*/
    gtk_widget_show (button);

    gtk_widget_show (box1);

    gtk_widget_show (window);
   
    /* 停在這裏等待事件發生。*/
    gtk_main ();

    return 0;
}

編譯這個程序,你會發現這次程序不能退出,你不得不使用窗口管理器或命令行去
殺死它。插入一個退出程序的按鈕對讀者來說是一個好的練習。


 

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