<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國際加速解決方案。 廣告
                # GTK+ 對話框 > 原文: [http://zetcode.com/gui/gtk2/gtkdialogs/](http://zetcode.com/gui/gtk2/gtkdialogs/) 在 GTK+ 編程教程的這一部分中,我們使用對話框。 對話框窗口或對話框是大多數現代 GUI 應用必不可少的部分。 對話被定義為兩個或更多人之間的對話。 在計算機應用中,對話框是一個窗口,用于與應用“對話”。 對話框用于輸入數據,修改數據,更改應用設置等。 ## `MessageDialog` 消息對話框是方便的對話框,可向應用的用戶提供消息。 該消息包含文本和圖像數據。 `messagedialogs.c` ```c #include <gtk/gtk.h> void show_info(GtkWidget *widget, gpointer window) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Download Completed"); gtk_window_set_title(GTK_WINDOW(dialog), "Information"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } void show_error(GtkWidget *widget, gpointer window) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error loading file"); gtk_window_set_title(GTK_WINDOW(dialog), "Error"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } void show_question(GtkWidget *widget, gpointer window) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Are you sure to quit?"); gtk_window_set_title(GTK_WINDOW(dialog), "Question"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } void show_warning(GtkWidget *widget, gpointer window) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "Unallowed operation"); gtk_window_set_title(GTK_WINDOW(dialog), "Warning"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *table; GtkWidget *info; GtkWidget *warn; GtkWidget *que; GtkWidget *err; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 220, 150); gtk_window_set_title(GTK_WINDOW(window), "Message dialogs"); table = gtk_table_new(2, 2, TRUE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 2); info = gtk_button_new_with_label("Info"); warn = gtk_button_new_with_label("Warning"); que = gtk_button_new_with_label("Question"); err = gtk_button_new_with_label("Error"); gtk_table_attach(GTK_TABLE(table), info, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 3, 3); gtk_table_attach(GTK_TABLE(table), warn, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 3, 3); gtk_table_attach(GTK_TABLE(table), que, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 3, 3); gtk_table_attach(GTK_TABLE(table), err, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 3, 3); gtk_container_add(GTK_CONTAINER(window), table); gtk_container_set_border_width(GTK_CONTAINER(window), 15); g_signal_connect(G_OBJECT(info), "clicked", G_CALLBACK(show_info), (gpointer) window); g_signal_connect(G_OBJECT(warn), "clicked", G_CALLBACK(show_warning), (gpointer) window); g_signal_connect(G_OBJECT(que), "clicked", G_CALLBACK(show_question), (gpointer) window); g_signal_connect(G_OBJECT(err), "clicked", G_CALLBACK(show_error), (gpointer) window); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window)); gtk_widget_show_all(window); gtk_main(); return 0; } ``` 在我們的示例中,我們顯示了四種消息對話框:信息,警告,問題和錯誤消息對話框。 ```c void show_question(GtkWidget *widget, gpointer window) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Are you sure to quit?"); gtk_window_set_title(GTK_WINDOW(dialog), "Question"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } ``` 在`show_question()`函數中,我們彈出消息對話框。 消息對話框是使用`gtk_message_dialog_new()`調用創建的。 函數的參數指定我們創建哪種消息對話框。 `GTK_MESSAGE_QUESTION`常量創建一個問題類型對話框。 `GTK_BUTTONS_YES_NO`常量將在對話框中添加“是”和“否”按鈕。 最后一個參數是我們在對話框中顯示的文本。 `gtk_dialog_run()`函數顯示對話框并阻塞主循環,直到對話框響應或被破壞為止。 該對話框必須使用`gtk_widget_destroy()`函數銷毀。 ![Information message dialog](https://img.kancloud.cn/2a/f5/2af50aed0bac19731eda834b729268e9_214x154.jpg) ![Warning message dialog](https://img.kancloud.cn/58/bb/58bb7293bb98d29937168dcac8ebff30_210x154.jpg) ![Question message dialog](https://img.kancloud.cn/a4/51/a4517b1a6096393af310478d034feb76_207x154.jpg) ![Error message dialog](https://img.kancloud.cn/be/bd/bebdd243f17dadd652990536b4e4f641_183x154.jpg) 圖:消息對話框 ## `GtkAboutDialog` `GtkAboutDialog`是一個對話框,其目的是顯示有關應用的信息。 它可以顯示徽標,應用名稱,版本,版權,網站和許可證信息。 也有可能對作者,文檔撰寫者,翻譯者和藝術家予以贊揚。 `aboutdialog.c` ```c #include <gtk/gtk.h> void show_about(GtkWidget *widget, gpointer data) { GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file("battery.png", NULL); GtkWidget *dialog = gtk_about_dialog_new(); gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog), "Battery"); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), "0.9"); gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog),"(c) Jan Bodnar"); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), "Battery is a simple tool for battery checking."); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), "http://www.batteryhq.net"); gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), pixbuf); g_object_unref(pixbuf), pixbuf = NULL; gtk_dialog_run(GTK_DIALOG (dialog)); gtk_widget_destroy(dialog); } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *about; GdkPixbuf *battery; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 220, 150); gtk_window_set_title(GTK_WINDOW(window), "Battery"); gtk_container_set_border_width(GTK_CONTAINER(window), 15); gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(show_about), (gpointer) window); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window)); gtk_widget_show_all(window); gtk_main(); return 0; } ``` 該代碼示例使用具有某些功能的`GtkAboutDialog`。 單擊窗口的客戶區域會彈出對話框。 ```c GtkWidget *dialog = gtk_about_dialog_new(); ``` `GtkAboutDialog`是使用`gtk_about_dialog_new()`函數創建的。 ```c gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog), "Battery"); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), "0.9"); gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog), "(c) Jan Bodnar"); ``` 這些函數調用設置應用的名稱,版本和版權。 ```c gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), "Battery is a simple tool for battery checking."); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), "http://www.batteryhq.net"); ``` 這些行設置了描述性注釋和應用的網站。 ```c GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file("battery.png", NULL); ... gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), pixbuf); g_object_unref(pixbuf), pixbuf = NULL; ``` 此代碼創建應用的徽標。 ![GtkAboutDialog](https://img.kancloud.cn/78/2f/782ffb93189ea94d53cdaef38227930f_277x234.jpg) 圖:`GtkAboutDialog` ## `GtkFontSelectionDialog` `GtkFontSelectionDialog`是用于選擇字體的對話框。 它通常用于進行一些文本編輯或格式化的應用中。 `fontdialog.c` ```c #include <gtk/gtk.h> void select_font(GtkWidget *widget, gpointer label) { GtkResponseType result; GtkWidget *dialog = gtk_font_selection_dialog_new("Select Font"); result = gtk_dialog_run(GTK_DIALOG(dialog)); if (result == GTK_RESPONSE_OK || result == GTK_RESPONSE_APPLY) { PangoFontDescription *font_desc; gchar *fontname = gtk_font_selection_dialog_get_font_name( GTK_FONT_SELECTION_DIALOG(dialog)); font_desc = pango_font_description_from_string(fontname); gtk_widget_modify_font(GTK_WIDGET(label), font_desc); g_free(fontname); } gtk_widget_destroy(dialog); } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *label; GtkWidget *vbox; GtkWidget *toolbar; GtkToolItem *font; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 280, 200); gtk_window_set_title(GTK_WINDOW(window), "Font Selection Dialog"); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); toolbar = gtk_toolbar_new(); gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); gtk_container_set_border_width(GTK_CONTAINER(toolbar), 2); font = gtk_tool_button_new_from_stock(GTK_STOCK_SELECT_FONT); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), font, -1); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5); label = gtk_label_new("ZetCode"); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, FALSE, 5); g_signal_connect(G_OBJECT(font), "clicked", G_CALLBACK(select_font), label); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } ``` 在代碼示例中,我們在窗口中心放置了一個簡單標簽。 我們通過單擊工具欄按鈕顯示一個字體選擇對話框。 ```c GtkWidget *dialog = gtk_font_selection_dialog_new("Select Font"); result = gtk_dialog_run(GTK_DIALOG(dialog)); ``` 我們使用`gtk_font_selection_dialog_new()`函數創建`GtkFontSelectionDialog`,然后使用`gtk_dialog_run()`函數運行它。 ```c if (result == GTK_RESPONSE_OK || result == GTK_RESPONSE_APPLY) { PangoFontDescription *font_desc; gchar *fontname = gtk_font_selection_dialog_get_font_name( GTK_FONT_SELECTION_DIALOG(dialog)); font_desc = pango_font_description_from_string(fontname); gtk_widget_modify_font(GTK_WIDGET(label), font_desc); g_free(fontname); } ``` 如果用戶單擊“確定”或“應用”按鈕,則繼續。 我們使用`gtk_font_selection_dialog_get_font_name()`函數獲得選定的字體名稱。 然后,將標簽的字體更改為選定的字體名稱。 ![GtkFontSelectionDialog](https://img.kancloud.cn/18/7d/187d25158e5761bccf384c17a8d8069f_449x365.jpg) 圖:`GtkFontSelectionDialog` ## `GtkColorSelectionDialog` `GtkColorSelectionDialog`是用于選擇顏色的對話框。 `colordialog.c` ```c #include <gtk/gtk.h> void select_font(GtkWidget *widget, gpointer label) { GtkResponseType result; GtkColorSelection *colorsel; GtkWidget *dialog = gtk_color_selection_dialog_new("Font Color"); result = gtk_dialog_run(GTK_DIALOG(dialog)); if (result == GTK_RESPONSE_OK) { GdkColor color; colorsel = GTK_COLOR_SELECTION( GTK_COLOR_SELECTION_DIALOG(dialog)->colorsel); gtk_color_selection_get_current_color(colorsel, &color); gtk_widget_modify_fg(GTK_WIDGET(label), GTK_STATE_NORMAL, &color); } gtk_widget_destroy(dialog); } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *widget; GtkWidget *label; GtkWidget *vbox; GtkWidget *toolbar; GtkToolItem *font; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 280, 200); gtk_window_set_title(GTK_WINDOW(window), "Color Selection Dialog"); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); toolbar = gtk_toolbar_new(); gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); gtk_container_set_border_width(GTK_CONTAINER(toolbar), 2); font = gtk_tool_button_new_from_stock(GTK_STOCK_SELECT_COLOR); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), font, -1); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5); label = gtk_label_new("ZetCode"); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, FALSE, 5); g_signal_connect(G_OBJECT(font), "clicked", G_CALLBACK(select_font), label); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } ``` 該示例與上一個示例非常相似。 這次我們更改標簽的顏色。 ```c GtkWidget *dialog = gtk_color_selection_dialog_new("Font Color"); result = gtk_dialog_run(GTK_DIALOG(dialog)); ``` 我們創建并顯示`GtkColorSelectionDialog`。 ```c if (result == GTK_RESPONSE_OK) { GdkColor color; colorsel = GTK_COLOR_SELECTION( GTK_COLOR_SELECTION_DIALOG(dialog)->colorsel); gtk_color_selection_get_current_color(colorsel, &color); gtk_widget_modify_fg(GTK_WIDGET(label), GTK_STATE_NORMAL, &color); } ``` 如果按“確定”按鈕,我們將獲得顏色并修改標簽的顏色。 顏色值通過`gtk_color_selection_get_current_color()`函數返回。 ![GtkColorSelectionDialog](https://img.kancloud.cn/16/ed/16ed6fcf1688b395e81f87c4aec6ec71_520x306.jpg) 圖:`GtkColorSelectionDialog` 本章是關于 GTK+ 中的對話框的。
                  <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>

                              哎呀哎呀视频在线观看