在以编程方式调整gtk窗口大小时,我似乎遇到了问题。问题是,一旦我将窗口的宽度和高度增加到800x600,我似乎无法将其缩小回原始尺寸400x200。 下面是示例代码。有没有人遇到这样的问题?
#include <gtk/gtk.h>
static gboolean is_clicked = FALSE;
static void Child_window_resize( GtkWidget *widget,
GtkWidget *window)
{
if(!is_clicked)
{
g_print("Inside If block increase bool value %d\n",is_clicked);
gtk_widget_set_size_request(window,800,600);
is_clicked = TRUE;
}
else
{
g_print("Inside Else block decrease bool value %d\n",is_clicked);
gtk_widget_set_size_request(window,400,200);
is_clicked = FALSE;
}
}
int main(int argc, char* argv[])
{
GtkWidget *window;
GtkWidget *fixed;
GtkWidget *resizebutton;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request(window,400,200);
gtk_window_set_resizable(GTK_WINDOW(window),TRUE);
gtk_window_set_title(GTK_WINDOW(window), "Demo Resize");
gtk_window_set_decorated(GTK_WINDOW(window),FALSE);
gtk_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(gtk_exit), NULL);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
// creating a fixed GTK_CONTAINER
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window),fixed);
gtk_widget_show(fixed);
resizebutton = gtk_button_new_with_label("Resize");
gtk_widget_set_size_request(resizebutton, 80, 60);
gtk_fixed_put(GTK_FIXED(fixed), resizebutton, 0, 0);
gtk_signal_connect(GTK_OBJECT(resizebutton), "clicked",
GTK_SIGNAL_FUNC(Child_window_resize), window);
gtk_widget_show(resizebutton);
gtk_widget_show(window);
gtk_main();
return 0;
}
使用...
编译gcc -Wall -Werror -g resize.c -o resize -export-dynamic `pkg-config --cflags --libs gtk+-2.0 gthread-2.0`
非常感谢任何帮助。
答案 0 :(得分:1)
而不是gtk_widget_set_size_request()
,您需要gtk_window_resize()
。
来自链接手册:
void gtk_window_resize (GtkWindow *window, gint width, gint height);
调整窗口大小,就像用户已经这样做一样,遵循几何体 限制。默认几何约束是窗口可能不是 小于他们的尺寸要求;要覆盖此约束,请调用
gtk_widget_set_size_request()
将窗口的请求设置为较小的 值。如果在显示第一个窗口之前调用
gtk_window_resize()
时间,它会覆盖任何设置的默认大小gtk_window_set_default_size()
。Windows的大小可能不会小于1 x 1。