IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

splash screen sous gtk+


Sujet :

GTK+ avec C & C++

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut splash screen sous gtk+
    Bonsoir,

    voilà j'aimerais ajouter un splash screen à mon application, donc j'arrive à le creer, à l'afficher mais c'est le détruire au bout d'un temps t qui me pose poblème. j'essaie d'utiliser g_timout_add mais j'ai ce message d'erreur à la compilation

    erreur : utilisation invalide d'expression void

    et je comprends pas pourquoi.

    voilà les parties de mon programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    /* --------------------------------------------------------------------------
       splash_screen ()
       --------------------------------------------------------------------------
       Role : Retourne un pointeur sur un splash screen
       -------------------------------------------------------------------------- */
    GtkWidget *splash_screen ()
    {
       GtkWidget *p_splash_screen = NULL;
       GtkWidget *p_image = NULL;
     
       p_splash_screen = gtk_window_new (GTK_WINDOW_POPUP);
       gtk_window_set_position (GTK_WINDOW (p_splash_screen), GTK_WIN_POS_CENTER);
       p_image = gtk_image_new_from_file ("splash.gif");
     
       gtk_container_add (GTK_CONTAINER (p_splash_screen), p_image);
     
     
     
       return p_splash_screen;
    }
     
     
     
     GtkWidget *p_splash_screen = NULL;
     
       /* Initialisation de gtk+ */
       gtk_init (&argc, &argv);
     
       /* Splash screen */
       p_splash_screen = splash_screen ();
       gtk_widget_show_all (p_splash_screen);
       g_timerID = g_timeout_add (10000, gtk_widget_destroy (p_splash_screen), NULL);
    merci.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    g_timerID = g_timeout_add (10000, gtk_widget_destroy, p_splash_screen);

    passera peut être, sinon il faut que tu définisses une fonction callback qui fera l'appel à gtk_widget_destroy (p_splash_screen)

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    g_timerID = g_timeout_add (10000, gtk_widget_destroy, p_splash_screen);

    passera peut être, sinon il faut que tu définisses une fonction callback qui fera l'appel à gtk_widget_destroy (p_splash_screen)

    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    g_timerID = g_timeout_add (10000, gtk_widget_destroy, p_splash_screen);
    ça ne passe pas , j'ai donc remplacer par ça


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    /* main */
     
    /* Initialisation de gtk+ */
       gtk_init (&argc, &argv);
     
       /* Splash screen */
       p_splash_screen = splash_screen ();
       gtk_widget_show_all (p_splash_screen);
       g_timerID = g_timeout_add (1000, (GSourceFunc) cb_detruire, p_splash_screen);
     
    /* --------------------------------------------------------------------------
       cb_detruire ()
       --------------------------------------------------------------------------
       Role : Detruit un widget
       -------------------------------------------------------------------------- */
    void cb_detruire (GtkWidget *p_widget, gpointer donnees_utilisateur)
    {
       gtk_widget_destroy (donnees_utilisateur);
    }
    le spalsh screen s'affiche en même temps que la fenêtre principale (ce que je veux c'est que le splash screen s'affiche avant la fenêtre principale - bon je sais que dans la vie on peut pas tout avoir mais là ce serait quand même bien si ça pouvait s'afficher avant - ) et surtout le splash screen n'est pas détruit et j'ai aussi une erreur dans la console (voir pièce jointe).

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Le prototype du callback que tu utilises puor g_timeout_add me paraît faux, ça doit être gboolean callback (gpointer user_data); le prototype du callback si mes souvenirs sont bons.

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Le prototype du callback que tu utilises puor g_timeout_add me paraît faux, ça doit être gboolean callback (gpointer user_data); le prototype du callback si mes souvenirs sont bons.
    Oui je viens tout juste de le trouver dans une doc

    http://library.gnome.org/devel/gtk-t...ble/c1761.html

    corrigé ça donne ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* --------------------------------------------------------------------------
       cb_detruire ()
       --------------------------------------------------------------------------
       Role : Detruit un widget
       -------------------------------------------------------------------------- */
    gint cb_detruire (gpointer donnees_utilisateur)
    {
       gtk_widget_destroy (donnees_utilisateur);
     
       /* On retourne FALSE pour stoper la fonction timeout */
       return FALSE;
    }
    Mais reste le problème du fait que la fenêtre de l'éditeur s'affiche en même temps que le splash screen, le problème doit venir du fait que la création de la fenetre de l'éditeur est aussi dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* Splash screen */
       p_splash_screen = splash_screen ();
       gtk_widget_show_all (p_splash_screen);
       g_timeout_add (1500, (GSourceFunc) cb_detruire, p_splash_screen);
     
       /* Creation de la fenetre principale de l'editeur */
       p_fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_default_size (GTK_WINDOW (p_fenetre), 616, 800);
       gtk_window_set_title (GTK_WINDOW(p_fenetre), TITRE_FENETRE);
       gtk_window_set_position (GTK_WINDOW (p_fenetre), GTK_WIN_POS_CENTER);
       g_signal_connect (G_OBJECT (p_fenetre), "destroy", G_CALLBACK (cb_quitter), NULL);
    je sais pas si il y a moyen de ne lancer la fenêtre principale qu'après la réalisation d'une condition qui serait le splash screen est détruit. J'ai essayer
    mais ça marche pas, la fenêtre se lance quand même. :/

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Comment je vois la chose, lorsque le splash screen est détruit il renvoie un signal, il faudrait peut être que j'intercepte ce signal et ne lance la fenêtre de l'application qu'une fois ce signal émis non ??

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Tu dois pouvoir créer ta fenêtre principale dans le callback où tu détruis le splash screen

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Tu dois pouvoir créer ta fenêtre principale dans le callback où tu détruis le splash screen
    Aîe j'avais peur qu'il faille faire ça, ça va trop changer mon programme pour quelque chose chose qui au départ n'était pas censée être inclue. On va donc laisser ça comme ça, c'est déjà pas si mal.

    Merci pour ton aide

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Tu dois pouvoir créer ta fenêtre principale dans le callback où tu détruis le splash screen
    Bon finalement je me suis décider à faire comme ça, et ça marche, le fait que le splash screen apparaisse avant en jette vraiment .

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire un splash screen pour son application?
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/04/2007, 14h28
  2. splash screen sous eclipse
    Par kifouillou dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 13/02/2007, 13h38
  3. affichage texte style splash screen
    Par scorbo dans le forum MFC
    Réponses: 4
    Dernier message: 13/06/2004, 12h03
  4. [DX9] Splash Screen
    Par delire8 dans le forum DirectX
    Réponses: 6
    Dernier message: 03/06/2004, 10h30
  5. affichage de controles sur un splash screen
    Par shrek dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/11/2003, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo