<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 對話框 ? ? ?? 對話框是一類GtkWindow,它用于提供頂層窗口。它可以為用戶提供消息,可以獲得用戶信息,或者提供一些簡短的動作。 ? ? ? 對話款構件被一個水平分割線分隔成兩半。上半部放置的是用戶界面的主要部分。下半部被稱為動作區域,它包括一系列的按鈕。當點擊,每個按鈕會發出一個唯一標識的信號,告訴程序員哪個按鈕被點擊了。 ? ? ? 一般來說,對話框構件可以被看做一個窗口,因為它從GtkWindow類繼承而來。然而,當您有多個窗口時,父親-孩子的關系應該建立在對話框和頂層窗口之間,對話框注定是頂層窗口的補充。 ~~~ typedef struct { GtkWidget *vbox; GtkWidget *action_area; } GtkDialog; ~~~ GtkDialog提供了兩個公共成員,包括一個橫向按鈕的盒子,稱為動作區域,以及一個縱向盒子。動作區域包括所有的按鈕,在對話框下部排列著。通過GtkHbuttonBox,您可以手工添加按鈕,但是通常您應該使用GtkDialog提供的函數來添加動作區域構件。 具體看下面一個簡單的例子: ~~~ /*File:dialogs.c *Date:2013-12-16 *Author:sjin *Mail:413977243@qq.com */ #include <gtk/gtk.h> //無模式窗口 //#define SCHEMALESS_WINDOW void button_click(GtkWidget *widget,GtkWindow *parent) { GtkWidget *dialog; GtkWidget *label; GtkWidget *image; GtkWidget *hbox; /*GtkWidget * gtk_dialog_new_with_buttons( * const gchar *title,對話框標題 * GtkWindow *parent,對話框父窗口 * GtkDialogFlags flags, * const gchar *first_button_text,動作區域按鈕列表 * ...); * falgs:GTK_DIALOG_MODAL:對話框始終保持在父窗口的上部,直到關閉,防止父窗口交互 * GTK_DIALOG_DESTROY_WITH_PARENT:父窗口銷毀,對話框也銷毀 * GTK_DIALOG_NO_SEPARATOR:不顯示分割線 * * */ #ifndef SCHEMALESS_WINDOW dialog = gtk_dialog_new_with_buttons("我的第一個對話框",parent,GTK_DIALOG_MODAL,GTK_STOCK_OK,GTK_RESPONSE_OK,NULL); #else dialog = gtk_dialog_new_with_buttons("我的第一個對話框",parent,GTK_DIALOG_DESTROY_WITH_PARENT,GTK_STOCK_OK,GTK_RESPONSE_OK,NULL); #endif /*設置分割線是否隱藏:FALSE:隱藏。*/ gtk_dialog_set_has_separator(GTK_DIALOG(dialog),FALSE); label = gtk_label_new("the button was clicked!"); /*GtkWidget * gtk_image_new_from_stock(const gchar *stock_id, * GtklconSize size) * 創建一個預制的Gtkimage構件,當載入一個圖片時,還需要指定圖片的 *大小,如果圖片沒有找到,GTK會自動尋找一個自制的圖標 * size :參數 GTK_ICON_SIZE_INVALID:未指定大小 * GTK_ICON_SIZE_MENU : 16X16像素 * GTK_ICON_SIZE_SMALL_TOOLBAR: 18X18像素 * GTK_ICON_SIZE_LARGE_TOOLBAR: 24X24像素 * GTK_ICON_SIZE_BUTTON: 24X24像素 * GTK_ICON_SIZE_DND: 32X32像素 * GTK_ICON_SIZE_DIALOG: 48X48像素 *還有另外兩個加載圖片的函數 *GtkWidget*gtk_image_new_from_file(const gchar *filename) *GtkWidget *gtk_image_new_from_pixbuf(GdkPixbuf *pixbuf) * */ image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO,GTK_ICON_SIZE_DIALOG); hbox = gtk_hbox_new(FALSE,5); gtk_container_set_border_width(GTK_CONTAINER(hbox),10); gtk_box_pack_start_defaults(GTK_BOX(hbox),image); gtk_box_pack_start_defaults(GTK_BOX(hbox),label); gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox),hbox); gtk_widget_show_all(dialog); #ifndef SCHEMALESS_WINDOW /*顯示對話框*/ gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); #else g_signal_connect(G_OBJECT(dialog),"response",G_CALLBACK(gtk_widget_destroy),NULL); #endif } int main(int argc, char*argv[]) { GtkWidget *window; GtkWidget *button; //初始化GTK gtk_init(&argc,&argv); //創建最上層主窗口 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //連接信號"delete_event",使得窗口關閉時發生 g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL); //設置窗口標題 gtk_window_set_title(GTK_WINDOW(window),"對話框練習"); //設定窗口的默認寬高 //gtk_window_set_default_size(GTK_WINDOW(window),200,300); //設定窗口的位置,讓窗口總在最前端 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); //設定容器邊框的寬度 gtk_container_set_border_width(GTK_CONTAINER(window),20); //創建按鈕 button = gtk_button_new_with_mnemonic("clicked me"); gtk_container_add(GTK_CONTAINER(window),button); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(button_click),(gpointer)window); gtk_widget_show(button); gtk_widget_show_all(window); gtk_main(); return 0; } ~~~ 編譯時有兩種模式,-DSCHEMALESS_WINDOW 是無模式窗口,和模式窗口(不能和父窗口交互,永遠在父窗口上面)。 運行: ![](https://box.kancloud.cn/2016-08-24_57bd7797b2361.jpg) 另外一個對話框的應用: ~~~ /*File:dialogs3.c *Date:2013-12-16 *Author:sjin *Mail:413977243@qq.com */ #include <gtk/gtk.h> int main(int argc, char*argv[]) { GtkWidget *dialog; GtkWidget *table; GtkWidget *user,*real,*home,*host; GtkWidget *lbl1,*lbl2,*lbl3,*lbl4; gint result; //初始化GTK gtk_init(&argc,&argv); /*GtkWidget * gtk_dialog_new_with_buttons( * const gchar *title,對話框標題 * GtkWindow *parent,對話框父窗口 * GtkDialogFlags flags, * const gchar *first_button_text,動作區域按鈕列表 * ...); * falgs:GTK_DIALOG_MODAL:對話框始終保持在父窗口的上部,直到關閉,防止父窗口交互 * GTK_DIALOG_DESTROY_WITH_PARENT:父窗口銷毀,對話框也銷毀 * GTK_DIALOG_NO_SEPARATOR:不顯示分割線 * * */ dialog = gtk_dialog_new_with_buttons("用戶信息編輯窗口",NULL, GTK_DIALOG_MODAL, GTK_STOCK_OK,GTK_RESPONSE_OK, GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, NULL); //設置缺省按鈕 gtk_dialog_set_default_response(GTK_DIALOG(dialog),GTK_RESPONSE_OK); //創建4個條目,告訴用戶輸入的數據 lbl1 = gtk_label_new("User Name"); lbl2 = gtk_label_new("Real Name"); lbl3 = gtk_label_new("Home Dir"); lbl4 = gtk_label_new("Host Name"); user = gtk_entry_new(); real = gtk_entry_new(); home = gtk_entry_new(); host = gtk_entry_new(); //設置條目的缺省值 gtk_entry_set_text(GTK_ENTRY(user),g_get_user_name()); gtk_entry_set_text(GTK_ENTRY(real),g_get_real_name()); gtk_entry_set_text(GTK_ENTRY(home),g_get_home_dir()); gtk_entry_set_text(GTK_ENTRY(host),g_get_host_name()); //表組裝 table = gtk_table_new(4,2,FALSE); gtk_table_attach_defaults(GTK_TABLE(table),lbl1,0,1,0,1); gtk_table_attach_defaults(GTK_TABLE(table),lbl2,0,1,1,2); gtk_table_attach_defaults(GTK_TABLE(table),lbl3,0,1,2,3); gtk_table_attach_defaults(GTK_TABLE(table),lbl4,0,1,3,4); gtk_table_attach_defaults(GTK_TABLE(table),user,1,2,0,1); gtk_table_attach_defaults(GTK_TABLE(table),real,1,2,1,2); gtk_table_attach_defaults(GTK_TABLE(table),home,1,2,2,3); gtk_table_attach_defaults(GTK_TABLE(table),host,1,2,3,4); gtk_table_set_row_spacings(GTK_TABLE(table),5); gtk_table_set_col_spacings(GTK_TABLE(table),5); gtk_container_set_border_width(GTK_CONTAINER(table),5); gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox),table); gtk_widget_show_all(dialog); //運行和輸出對話框 result = gtk_dialog_run(GTK_DIALOG(dialog)); switch(result){ case GTK_RESPONSE_NONE: /*-1 * 對話框被窗口管理器銷毀或通過gtk_widget_destroy()有其他程序銷毀。 * 如果構件沒有設置一個相應標識,會返回它。 */ break; case GTK_RESPONSE_REJECT: /* -2 * 這個標識沒有和對話框內置的任何按鈕相關聯,可以任意使用它 * */ break; case GTK_RESPONSE_ACCEPT: /* -3 * 這個標識沒有和對話框內置的任何按鈕相關聯,可以任意使用它 * */ break; case GTK_RESPONSE_DELETE_EVENT: /* -4 * 每個對話框都會自動連接到delete-event信號,當gtk_dialog_run() * 運行是,這個標識會被返回,而且delete-event會被終止、不會像 * 往常那樣銷毀窗口 * */ break; case GTK_RESPONSE_OK: /* -5 * GTK_STOCK_OK 被點擊 */ g_print("User Name:\t%s\n",gtk_entry_get_text(GTK_ENTRY(user))); g_print("Real Name:\t%s\n",gtk_entry_get_text(GTK_ENTRY(real))); g_print("Home Dir:\t%s\n",gtk_entry_get_text(GTK_ENTRY(home))); g_print("Host Name:\t%s\n",gtk_entry_get_text(GTK_ENTRY(host))); break; case GTK_RESPONSE_CANCEL: /*-6 * GTK_STOCK_CANCEL被點擊 * */ g_print("cancel is press!\n"); break; case GTK_RESPONSE_CLOSE: /* -7 *GTK_STOCK_CLOSE被點擊 */ break; case GTK_RESPONSE_YES: /* -8 *GTK_STOCK_YES被點擊 */ break; case GTK_RESPONSE_NO: /* -9 *GTK_STOCK_NO被點擊 */ break; case GTK_RESPONSE_APPLY: /* -10 *GTK_STOCK_APPLY被點擊 */ break; case GTK_RESPONSE_HELP: /* -11 *GTK_STOCK_HELP被點擊 */ break; default: g_print("something wrong!\n"); break; } gtk_widget_destroy(dialog); //gtk_main(); return 0; } ~~~ 運行結果如下: ![](https://box.kancloud.cn/2016-08-24_57bd7797c90bf.jpg) **消息對話框** ? ? ? 消息對話框用于下列四種消息:一般信息、錯誤信息、警告和問題。對話框的類型決定了顯示的圖表類型、對話框標題和添加的按鈕。 ? ? ? 還有一種通用類型的對話框,它對內容沒有任何假設。在多數情況下,您不需要使用它,因為上述四種類型基本上滿足了大部分需求。 ? ? ? 重新創建GtkMessageDialog構件是很容易的。前面的兩個例子實現了一個簡單的消息對話框,但是GtkMessageDialog已經提供了這個功能,因此您不需要重新創建這個構件。使用GtkMessageDialog節省了代碼,而且避免您反復重新創建這種構件,其實大部分應用程序反復使用GtkMessageDialog。它還為所有GTK+應用程序提供了一個統一的外觀。 ?具體看下面的示例: ![](https://box.kancloud.cn/2016-08-24_57bd7797df3b7.jpg) 具體代碼如下: ~~~ /*File: message.c *Date:2013-12-21 *Author:sjin *Mail:43977243@qq.com */ #include <gtk/gtk.h> static void on_button_clicked(GtkWidget* button,gpointer data) { GtkWidget* dialog; GtkMessageType type; gchar* message; switch((int)data){ case 1: message = "這是個信息提示對話框."; type = GTK_MESSAGE_INFO; break; case 2: message = "這是個錯誤提示對話框"; type = GTK_MESSAGE_ERROR; break; case 3: message = "這是個問題提示對話框"; type = GTK_MESSAGE_QUESTION; break; case 4: message = "這是個警告提示對話框"; type = GTK_MESSAGE_WARNING; break; default: break; } /*GtkWidget * gtk_message_dialog_new(GtkWindow *parent, * GtkDialogFlags flags, * GtkMessageType type, * GtkButtonsType buttons, * const gchar * message_format, * ...); * type :枚舉的五個可能值: * GTK_MESSAGE_INFO:顯示用戶的一般性消息 * GTK_MESSAGE_WARNING:一個警告信息,表示發生了非致命的錯誤 * GTK_MESSAGE_QUESTION:詢問用戶一個問題,用戶必須做出選擇。 * GTK_MESSAGE_ERROR:警告信息,標識發生了一個致命的錯誤 * GTK_MESSAGE_OTHER:一般類型的消息 * buttons:顯示什么類型的按鈕 * GTK_BUTTONS_NONE:不添加任何按鈕。 * GTK_BUTTONS_OK:添加GTK_STOCK_OK按鈕 * GTK_BUTTONS_CLOSE:添加GTK_STOCK_CLOSE按鈕 * GTK_BUTTONS_CANCEL:添加GTK_STOCK_CANCEL按鈕 * GTK_BUTTONS_YES_NO:添加GTK_STOCK_YES和GTK_STOCK_NO * GTK_BUTTONS_OK_CANCEL: ... * 最后一個參數是顯示對話框中的內容 * * void gtk_message_dialog_set_format_secondary_text(GtkMessageDialog*dialog, * const gchar *message_format, * ...); * 為消息對話框添加第二段文本,他會導致第一個文本被設置成粗體。這個功能 * 非常有用,它允許您在第一段文字中寫一個簡短的概要,在第二段文本中詳細 * 描述。通過gtk_message_set_format_secondary_markup()來設置文本格式 * */ dialog = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,type,GTK_BUTTONS_OK,message); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } int main(int argc,char* argv[]) { GtkWidget* window; GtkWidget* frame; GtkWidget* box; GtkWidget* button1; GtkWidget* button2; GtkWidget* button3; GtkWidget* button4; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),"創建消息框"); g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL); gtk_container_set_border_width(GTK_CONTAINER(window),20); frame = gtk_frame_new("四種消息對話框"); gtk_container_add(GTK_CONTAINER(window),frame); box = gtk_hbox_new(TRUE,0); gtk_container_add(GTK_CONTAINER(frame),box); gtk_container_set_border_width(GTK_CONTAINER(box),20); button1 = gtk_button_new_from_stock(GTK_STOCK_DIALOG_INFO); gtk_box_pack_start(GTK_BOX(box),button1,FALSE,FALSE,5); g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_button_clicked),(gpointer)1); /*GtkWidget * gtk_button_new_from_stock(const gchar *stock_id); * GTK內部保存的條目:圖片和文字。stock_id:對應的ID */ button2 = gtk_button_new_from_stock(GTK_STOCK_DIALOG_ERROR); gtk_box_pack_start(GTK_BOX(box),button2,FALSE,FALSE,5); g_signal_connect(G_OBJECT(button2),"clicked",G_CALLBACK(on_button_clicked),(gpointer)2); button3 = gtk_button_new_from_stock(GTK_STOCK_DIALOG_QUESTION); gtk_box_pack_start(GTK_BOX(box),button3,FALSE,FALSE,5); g_signal_connect(G_OBJECT(button3),"clicked",G_CALLBACK(on_button_clicked),(gpointer)3); button4 = gtk_button_new_from_stock(GTK_STOCK_DIALOG_WARNING); gtk_box_pack_start(GTK_BOX(box),button4,FALSE,FALSE,5); g_signal_connect(G_OBJECT(button4),"clicked",G_CALLBACK(on_button_clicked),(gpointer)4); gtk_widget_show_all(window); gtk_main(); return FALSE; } ~~~ **關于對話框** ?????? GtkAboutDialog構件為您提供了一個簡單方式,來顯示程序的“關于“信息。通常,當用戶點GTK_STOCK_ABOUT菜單項時,這個對話框會顯示出來。然而,我們要到第九章才會談到菜單,因此我們的例子對話框就是用頂層窗口。 ?????? 用GtkAboutDialog可以顯示不同類型的信息。這包括應用程序的名字、版權、當前版本、授權協議、作者、文檔、美工和翻譯。因為不是每個程序都有這些內容,每一個屬性都是可選的。主窗口只顯示基本信息,在Figure 5-4中可以看到,連同作者信息。 看下面示例圖片:及代碼 ![](https://box.kancloud.cn/2016-08-24_57bd7798218d2.jpg) ~~~ /*File: aboutdialogs.c *Date:2013-12-21 *Author:sjin *Mail:43977243@qq.com */ #include <gtk/gtk.h> int main(int argc,char* argv[]) { GtkWidget *dialog; GdkPixbuf *logo; GError *error = NULL; const gchar *authors[] ={ "Kyle Loudon", "sjin", NULL }; const gchar *documenters[]={ "指針操作", "遞歸", "算法", "鏈表", "棧和隊列", "集合", "哈希表", "樹", NULL }; const gchar * translators = "肖翔\n陳珂"; //初始化環境 gtk_init(&argc,&argv); //創建對話框 dialog = gtk_about_dialog_new(); //創建一個圖標 logo = gdk_pixbuf_new_from_file("./logo.jpg",&error); if(error == NULL){ gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog),logo); } else { if(error->domain == GDK_PIXBUF_ERROR){ g_print("GdkPixbuf Error : %s\n",error->message); } else if(error->domain == G_FILE_ERROR){ g_print("GFileError : %s\n",error->message); } else { g_print("an error in the domain : %d has occured!\n",error->domain); } } //設置顯示在主對話框上的數據 gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog),"算法精解-C語言描述"); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog),"1.0"); gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog),"(C)2007 Andrew Krause"); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog),"我的第一本算法書籍"); //設置作者,文檔,翻譯 gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog),authors); gtk_about_dialog_set_documenters(GTK_ABOUT_DIALOG(dialog),documenters); gtk_about_dialog_set_translator_credits(GTK_ABOUT_DIALOG(dialog),translators); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return FALSE; } ~~~ 下面是另一種實現思路: ![](https://box.kancloud.cn/2016-08-24_57bd779844277.jpg) ~~~ /*File:about.c *Date:2013-12-22 *Author:sjin *Mail:413977243@qq.com * */ #include <gtk/gtk.h> static GtkWidget* credits_window; GtkWidget* create_credits() { GtkWidget* window; GtkWidget* vbox; GtkWidget* notebook; GtkWidget* page; GtkWidget* label; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),"開發人員"); vbox = gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(window),vbox); //這里使用了notebook notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(vbox),notebook,FALSE,FALSE,5); page = gtk_vbox_new(FALSE,0); label = gtk_label_new("Kyle Loudon"); gtk_box_pack_start(GTK_BOX(page),label,FALSE,FALSE,5); label = gtk_label_new("sjin"); gtk_box_pack_start(GTK_BOX(page),label,FALSE,FALSE,5); label = gtk_label_new("作者"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),page,label); page = gtk_vbox_new(FALSE,0); label = gtk_label_new("集合"); gtk_box_pack_start(GTK_BOX(page),label,FALSE,FALSE,5); label = gtk_label_new("文檔"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),page,label); page = gtk_vbox_new(FALSE,0); label = gtk_label_new("肖翔\n陳珂"); gtk_box_pack_start(GTK_BOX(page),label,FALSE,FALSE,5); label = gtk_label_new("翻譯"); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),page,label); gtk_widget_show_all(window); return window; } void show_credits() { credits_window = create_credits(); gtk_widget_show(credits_window); } int main(int argc,char* argv[]) { GtkWidget* bbox; GtkWidget* vbox; GtkWidget* label; GtkWidget* window; GtkWidget* sep; GtkWidget* image; GtkWidget* button; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL); gtk_window_set_title(GTK_WINDOW(window),"關于對話框"); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(window),10); vbox = gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(window),vbox); image = gtk_image_new_from_file("logo.jpg"); gtk_box_pack_start(GTK_BOX(vbox),image,FALSE,FALSE,5); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label),"<span><big>算法精解-C語言描述</big></span>"); gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,5); label = gtk_label_new("版權所有:機械工業出版社\n 作者:Kyle Loudon"); gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,5); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox),sep,FALSE,FALSE,5); bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox),GTK_BUTTONBOX_EDGE); gtk_box_pack_start(GTK_BOX(vbox),bbox,FALSE,FALSE,5); button = gtk_button_new_with_label("credits"); gtk_box_pack_start(GTK_BOX(bbox),button,FALSE,FALSE,25); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(show_credits),NULL); button = gtk_button_new_from_stock(GTK_STOCK_OK); g_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(gtk_main_quit),NULL); gtk_box_pack_start(GTK_BOX(bbox),button,FALSE,FALSE,35); gtk_widget_show_all(window); gtk_main(); return FALSE; } ~~~ 參考資料: [http://guoyinghui2012.blog.163.com/blog/static/20871720020126219391244/](http://guoyinghui2012.blog.163.com/blog/static/20871720020126219391244/)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看