GTK+ 2.0 教學-表格封裝範例

這裡我們創建一個包含一個2×2表格的視窗,表格中放入三個按鈕。前兩個按鈕將放在上面那行裡。而第三個,quit按鈕,放在下面那行,並佔據了兩列。這就是說它看起來應該像這樣:

原始碼如下:

#include </gtk.h>

/* 我們的回呼。 傳到這個函式的資料被列印到標準輸出 */
static void callback( GtkWidget *,
                      gpointer   data )
{
    g_print ("Hello again - %s was pressed\n", (char *) data);
}

/* 這個回呼退出程式 */
static gboolean delete_event( GtkWidget *,
                              GdkEvent  *event,
                              gpointer   data )
{
    _main_quit ();
    return FALSE;
}

int main( int   argc,
          char *argv[] )
{
    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *table;

    _init (&argc, &argv);

    /* 創建一個新視窗 */
    window = _window_new (_WINDOW_TOPLEVEL);

    /* 設置視窗標題 */
    _window_set_title (_WINDOW (window), "Table");

    /* 為delete_event設置一個立即退出GTK的處理函式。 */
    g_signal_connect (window, "delete-event",
                      G_CALLBACK (delete_event), NULL);

   /* 設置視窗的邊框寬度。 */
    _container_set_border_width (_CONTAINER (window), 20);

    /* 創建一個2x2的表格 */
    table = _table_new (2, 2, TRUE);

    /* 將表格放進主視窗 */
    _container_add (_CONTAINER (window), table);

    /* 創建第一個按鈕 */
    button = _button_new_with_label ("button 1");

    /* 當這個按鈕被點擊時,我們呼叫 "callback" 函式,並將一個 * 指向"button 1"的指標作為它的參數 */
    g_signal_connect (button, "clicked",
	              G_CALLBACK (callback), (gpointer) "button 1");

    /* 將button 1插入表格的左上象限(quadrant) */
    _table_attach_defaults (_TABLE (table), button, 0, 1, 0, 1);

    _widget_show (button);

    /* 創建第二個按鈕 */

    button = _button_new_with_label ("button 2");

    /* 當這個按鈕被點擊時,我們呼叫 "callback" 函式,並將一個指向"button 2"的指標作為它的參數 */
    g_signal_connect (button, "clicked",
                      G_CALLBACK (callback), (gpointer) "button 2");
    /* 將button 2插入表格的右上象限 */
    _table_attach_defaults (_TABLE (table), button, 1, 2, 0, 1);

    _widget_show (button);

    /* 創建"Quit"按鈕 */
    button = _button_new_with_label ("Quit");

    /* 當這個按鈕被點擊時,我們呼叫 "delete_event" 函式接著程式就退出了 */
    g_signal_connect (button, "clicked",
                      G_CALLBACK (delete_event), NULL);

    /* 將退出按鈕插入表格的下面兩個象限 */
    _table_attach_defaults (_TABLE (table), button, 0, 2, 1, 2);

    _widget_show (button);

    _widget_show (table);
    _widget_show (window);

    _main ();

    return 0;
}
« 
單元首頁
 »
Print Friendly, PDF & Email

1 則留言


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料