接下来我们将学习一下相关函数的使用方法和功能。
GtkWidget *
gtk_dialog_get_content_area (GtkDialog *dialog);
GtkWidget *
gtk_dialog_add_button (GtkDialog *dialog,
const gchar *button_text,
gint response_id);
void
gtk_dialog_add_buttons (GtkDialog *dialog,
const gchar *first_button_text,
...);
gint
gtk_dialog_run (GtkDialog *dialog);
以下例子使用以上函数主要实现了:
1.
在dialog上添加 label
2.
在dialog上添加 button
3.
点击添加的 button ,并完成一些功能
例子
#include <gtk/gtk.h>
static GtkWidget *create_window(const gint, const gint);
void button_clicked_cb(GtkWindow *window)
{
GtkWidget *dialog;
GtkWidget *label;
GtkWidget *container;
gint response;
/// *** dialog
dialog = gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog), "Dialog");
gtk_widget_set_size_request(dialog, 200, 300);
gtk_window_set_transient_for(GTK_WINDOW(dialog), window);
/// *** 防止与同一程序的另一窗口进行交互,将dialog置于顶部
gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
/// *** label
label = gtk_label_new("点击YES关闭程序\n点击NO关闭Dialog");
/// ***
container = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
g_object_set(label, "parent", container, NULL);
/// ***
// gtk_dialog_add_button(GTK_DIALOG(dialog), "YES", 1);
// gtk_dialog_add_button(GTK_DIALOG(dialog), "NO", 2);
/// *** 完成上面两行代码的功能
gtk_dialog_add_buttons(GTK_DIALOG(dialog), "YES", 1, "NO", 2, NULL);
gtk_widget_show_all(dialog);
/// ***
response = gtk_dialog_run(GTK_DIALOG(dialog));
switch (response)
{
case 1: /// *** YES button
g_print("The YES button has pressed\n");
gtk_widget_destroy(GTK_WIDGET(window));
break;
case 2: /// *** NO button
g_print("The NO button has pressed\n");
gtk_widget_destroy(GTK_WIDGET(dialog));
break;
default:
break;
}
}
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window;
GtkWidget *button;
/// *** Create a Window
window = create_window(400, 500);
/// *** Create a button
button = gtk_button_new_with_mnemonic("_Open the dialog");
g_object_set(button,
"margin", 50,
"parent", window,
NULL);
g_signal_connect_swapped(button, "clicked", G_CALLBACK(button_clicked_cb), window);
gtk_widget_show_all(window);
gtk_main();
}
static GtkWidget *create_window(const gint w, const gint h)
{
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_window_set_default_size(GTK_WINDOW(window), w, h);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_title(GTK_WINDOW(window), "Hello GTK3");
gtk_container_set_border_width(GTK_CONTAINER(window), 50);
return window;
}
- 运行结果