c语言 - 如何在 GTK 的主窗口中居中对话窗口?



我想打印小警告消息。为了实现这一点,我正在创建一个新窗口,我希望它以主窗口为中心。到目前为止,我已经尝试使用gtk_widget_set_parent设置其父级,使用GTK_WINDOW_POPUPGTK_WINDOW_TOPLEVEL但没有任何效果。

如何将窗口居中放在主窗口上?

下面是该函数的代码:

static void pop_warning(char *title, char *text)
{
GtkWidget *warning_window;
GtkWidget *box;
GtkWidget *label;
GtkWidget *button;
warning_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(warning_window), title);
g_signal_connect(GTK_WINDOW(warning_window), "destroy", G_CALLBACK(gtk_widget_destroy), NULL);
gtk_container_set_border_width(GTK_CONTAINER(warning_window), 20);
gtk_window_set_resizable(GTK_WINDOW(warning_window), FALSE);    
//window is the main window
gtk_widget_set_parent(warning_window, window);
gtk_window_set_position(GTK_WINDOW(warning_window), GTK_WIN_POS_CENTER_ON_PARENT);
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
gtk_container_add(GTK_CONTAINER(warning_window), box);
label = gtk_label_new(text);
gtk_box_pack_start(GTK_BOX(box), label, TRUE, FALSE, 0);
button = gtk_button_new_with_label("Ok");
g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), warning_window);
gtk_box_pack_start(GTK_BOX(box), button, TRUE, FALSE, 0);
gtk_widget_show_all(warning_window);    
}
gtk_window_set_position(GTK_WINDOW(warning_window), GTK_WIN_POS_CENTER_ON_PARENT);

仅在您第一次致电时才有效

gtk_window_set_transient_for(GtkWindow *window, GtkWindow *parent);

如文档中明确提到的。

您也可以尝试使用没有上述约束的GTK_WIN_POS_CENTER_ALWAYS- 至少不是根据文档。

最新更新