在 GTK 窗口上,标题栏中呈现一个红色的关闭图标。通常,当您单击此按钮时,窗口将关闭并释放其资源。
有没有办法拦截正常流程以防止窗口被破坏,以便我稍后可以再次显示它?即我想隐藏窗口而不是关闭/销毁它。
这是我到目前为止所拥有的。
void destroy_window_callback(GtkWidget* widget, WebWindow_Linux* source)
{
printf("Don't destroy the window, just hide it.\n");
}
g_signal_connect(web_window, "destroy", G_CALLBACK(destroy_window_callback), this);
Run Code Online (Sandbox Code Playgroud)
这可能就是你所需要的
#include <gtk/gtk.h>
void
on_button_clicked(GtkButton *button, gpointer data)
{
GtkWidget *widget;
widget = (GtkWidget *) data;
if (widget == NULL)
return;
gtk_widget_show(widget);
return;
}
gboolean
on_widget_deleted(GtkWidget *widget, GdkEvent *event, gpointer data)
{
gtk_widget_hide(widget);
return TRUE;
}
int
main(int argc, char **argv)
{
GtkWidget *window1;
GtkWidget *window2;
GtkWidget *button;
gtk_init(&argc, &argv);
window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
window2 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
button = gtk_button_new_with_label("Show again...");
g_signal_connect(G_OBJECT(window1),
"destroy", gtk_main_quit, NULL);
g_signal_connect(G_OBJECT(window2),
"delete-event", G_CALLBACK(on_widget_deleted), NULL);
g_signal_connect(G_OBJECT(button),
"clicked", G_CALLBACK(on_button_clicked), window2);
gtk_container_add(GTK_CONTAINER(window1), button);
gtk_widget_set_size_request(window1, 300, 100);
gtk_widget_set_size_request(window2, 300, 100);
gtk_widget_show_all(window1);
gtk_widget_show(window2);
gtk_main();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我们基本上有三个小部件、两个顶级窗口和一个按钮。第一个窗口的事件与按下窗口的关闭按钮时退出应用程序"destroy"相关。gtk_main_quit()第二个窗口连接"delete-event"到自定义函数。这是最重要的一点。正如您所看到的,它返回TRUE表明信号已被处理,从而阻止调用默认处理程序,从而阻止调用gtk_widget_destroy(). 如果需要的话,我们还可以在其中隐藏小部件。