2012-01-31 69 views
1

我想確定最大化窗口的大小,以便我可以將窗口大小設置爲接近它的值。但是,如果沒有先顯示最大化的窗口,我不知道該怎麼做。在窗口顯示之前有沒有辦法發出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; 
} 

回答

2

不,這是不可能的,因爲直到窗口管理器映射窗口,實際大小是未知的。但你可以做的是獲得屏幕大小:

width=gdk_screen_width(); 
height=gdk_screen_height(); 
gtk_widget_set_size_request(window, width/2, height/2); 
+0

好的,所以現在有辦法讓WM來映射一個不可見的窗口,對吧?我真正想要做的就是讓窗戶幾乎和最大化窗戶一樣大(我編輯了我的帖子以反映這一點)。 – 2012-01-31 08:31:49

+0

然後只需將窗口設置爲例如0.8 *屏幕寬度和0.8 *屏幕高度。如果你使用gtk_widget_set_size_request(),它應該設置它的映射大小。 – salsaman 2012-01-31 20:42:43

+0

另一件需要注意的是窗口內容不會強制窗口擴展。爲了解決這個問題,將所有窗口內容放在主窗口內的滾動窗口內。 – salsaman 2012-01-31 20:43:58

相關問題