如何获得最大化窗口的大小而不显示它?
问题描述:
我想确定最大化窗口的大小,以便我可以将窗口大小设置为接近它的值。但是,如果没有先显示最大化的窗口,我不知道该怎么做。在窗口显示之前有没有办法发出gtk_window_maximize生成的信号?如何获得最大化窗口的大小而不显示它?
以下是我迄今的尝试。问题是,在调整大小之前,我可以看到最大化窗口的闪烁。
#include <gtk/gtk.h>
int signal_id;
void resize(GtkWindow *window, GdkEvent *event, gpointer data)
{
gint width, height;
g_signal_handler_disconnect(G_OBJECT(window), signal_id);
gtk_window_get_size(window, &width, &height);
gtk_window_resize(window, width - 10, height - 10);
}
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
signal_id = g_signal_connect(G_OBJECT(window), "configure-event", G_CALLBACK(resize), NULL);
gtk_window_maximize(GTK_WINDOW(window));
gtk_widget_show_all(GTK_WIDGET(window));
gtk_main();
return 0;
}
答
不,这是不可能的,因为直到窗口管理器映射窗口,实际大小是未知的。但你可以做的是获得屏幕大小:
width=gdk_screen_width();
height=gdk_screen_height();
gtk_widget_set_size_request(window, width/2, height/2);
好的,所以现在有办法让WM来映射一个不可见的窗口,对吧?我真正想要做的就是让窗户几乎和最大化窗户一样大(我编辑了我的帖子以反映这一点)。 – 2012-01-31 08:31:49
然后只需将窗口设置为例如0.8 *屏幕宽度和0.8 *屏幕高度。如果你使用gtk_widget_set_size_request(),它应该设置它的映射大小。 – salsaman 2012-01-31 20:42:43
另一件需要注意的是窗口内容不会强制窗口扩展。为了解决这个问题,将所有窗口内容放在主窗口内的滚动窗口内。 – salsaman 2012-01-31 20:43:58