2012-11-05 127 views
2

我是GTK的新手,我正在使用它來創建用戶界面。我創建了一個啓動畫面,並且可以在指定的秒數後使用函數g_timeout_add(100, function_to_call, NULL);關閉它。 Splash屏幕效果很好。但問題在於進一步擴展我的程序(即)關閉啓動畫面後,我希望自動顯示另一個窗口,但不會發生這種情況。兩個窗戶一起打開。這是我的程序。GTK中的初始屏幕

gboolean function_to_call(gpointer data){ 
    gtk_quit_main(); 
    return(FALSE); 
} 
int main (int argc, char *argv[]){ 
    GtkWidget *window, *image, *another_window; 
    gtk_init(&argc, &argv); 
    . 
    . 
    . 
    . 
    . 
    . 
    . 
    g_timeout_add (100, function_to_call, NULL); 
    gtk_main(); 
    /*if my program is till this, splash screen closes after 1 sec . But when i try 
    *to define another window from here onwards and call gtk_widget_show() and gtk_main() 
    *again for another_ window, window and another_window both open together and window 
    *doesn't close after 1 sec. */ 
} 

任何形式的幫助都是可以欣賞的。
謝謝。

回答

1

我已經創建瞭如下所示的啓動畫面頭文件..

#include <gtk/gtk.h> 

/* Close the splash screen */ 
gboolean close_screen(gpointer data) 
{ 
    gtk_widget_destroy((GtkWidget*)data); 
    gtk_main_quit(); 
    return(FALSE); 
} 


int Show_Splash_Screen(char* image_name,int time,int width,int height) 
{ 
    GtkWidget *image, *window; 
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    gtk_widget_set_size_request (window, width, height); 
    gtk_window_set_decorated(GTK_WINDOW (window), FALSE); 
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS); 
    gtk_window_set_resizable(GTK_WINDOW(window), FALSE); 
    image=gtk_image_new_from_file(image_name); 
    gtk_container_add(GTK_CONTAINER(window), image); 
    gtk_widget_show_all (window); 
    g_timeout_add (time, close_screen, window); 
    gtk_main(); 
    return 0; 
} 

只是包含這個文件,並顯示啓動畫面調用函數 Show_Splash_Screen(「IMAGE_PATH」,time_in_seconds,width_of_image_in_pixels,height_of_image_in_pixels );

+0

更好地使用gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS); 並且還添加gtk_window_set_type_hint(GTK_WINDOW(窗口),GDK_WINDOW_TYPE_HINT_SPLASHSCREEN); – Lothar

+0

嘿,謝謝你的建議...做了必要的修改..但是不明白爲什麼要使用gtk_window_set_type_hint(GTK_WINDOW(window),GDK_WINDOW_TYPE_HINT_SPLASHSCREEN)? ..謝謝:) –

+0

像這樣的解決方案會延遲使應用程序啓動?對於我的項目,我需要一個只顯示直到應用完成加載/設置的啓動畫面。我不想花費額外的時間來顯示啓動畫面。 – gonzobrains

7

您的function_to_call不會在這裏關閉您的啓動窗口,它會結束gtk_main事件循環。您不需要結束事件循環。

你想做的事,而不是在你的function_to_call什麼,是隱藏(或破壞)的啓動窗口,並顯示您的下一個窗口(gtk_widget_hide()gtk_widget_show())。

+0

謝謝..我明白了:) –