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 :

apparition de console malgré la compilation en mode windows (GUI Application) avec GTK


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut apparition de console malgré la compilation en mode windows (GUI Application) avec GTK
    Bonjour à tous,

    J'ai un problème que je ne sais résoudre, mais ne suis pas totalement sûr que ce problème vienne de GTK+. Je le soupconne tout de même, je la pose donc ici. N'hésitez pas à me dire si je suis hors sujet.

    Je développe des codes GTK avec Code::Blocks et je les compile en mode "release" c'est à dire sans l'apparition d'un console en mode texte. Jusqu'ici tout va bien.

    Le code que je développe doit - à l’occasion - lancer momentanément d'autres applications, et j'utilise la fonction C system() pour ca. Voici un exemple de code qui lance Word (sur une machine tournant sous windows) lorsque l'utilisateur clique sur un bouton :

    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
    33
    #include <stdlib.h>
    #include <gtk/gtk.h>
    #include <string.h>
     
    int main(int argc,char **argv)
    {
        GtkWidget* pWindow;
        GtkWidget* pBouton;
        gtk_init(&argc,&argv);
        void lancer_word(GtkButton *button, gpointer user_data); /* fonction callback sur le boutton */
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(pWindow), "lancer un programme exterieur");
        /* Creation du bouton */
        pBouton=gtk_button_new_with_label("Lancer word");
        /* On ajoute le bouton a l'intérieur de la fenêtre */
        gtk_container_add(GTK_CONTAINER(pWindow), pBouton);
        /* Affichage de la fenêtré et de tout ce qu'il contient */
        gtk_widget_show_all(pWindow);
        /* Connexion des signaux */
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
        g_signal_connect(G_OBJECT(pBouton), "clicked", G_CALLBACK(lancer_word), NULL);
        gtk_main();
        return EXIT_SUCCESS;
    }
     
    void lancer_word(GtkButton *button, gpointer user_data)
    {
        char tempo[500], guillemet[2];
        guillemet[0]='\042';
        guillemet[1]='\0';
        (void)sprintf(tempo,"%sC:\\Program Files (x86)\\Microsoft Office\\Office12\\winword.exe%s",guillemet,guillemet);
        (void)system(tempo);
    }
    Ca marche bien, sauf à un détail près : En même temps que l'application est lancée, une fenêtre console vide s'ouvre, ce qui n'est pas ni utile, ni souhaitable. Ceci ne dépend évidement pas de l'appli extérieure lancée. Est-ce GTK+ qui génère ca lorsqu'un fonction système est invoquée ? En clair : Comment se débarrasser de ce truc ? Je ne crois pas que ceci vienne des options de compilation, car l'appli, par défaut, se lance bien sans console..

    Toute aide sur ce point est la bienvenue.

    Cordialement, Eric.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Bonjour,
    Je suspecte fortement que cela provient des options de configuration du projet dans Code::Blocks. De plus, je te déconseille fortement l'utilistion de la commande system. C'est extrêmement tentant, mais quand on commence à utiliser system, c'est qu'on a pas compris le problèmeque l'on essaie de résoudre. System est bloquant, et ne rendra pas la main à GTK tant que tu n'auras pas fermé l'autre application. Pendant ce temps là, ton appli GTK est gelée, comme si elle avait planté. Je te conseille donc l'utilisation de g_spawn_async ou (plus simple) g_spawn_command_line_async.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  3. #3
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Bonjour,
    Je suspecte fortement que cela provient des options de configuration du projet dans Code::Blocks. De plus, je te déconseille fortement l'utilistion de la commande system. C'est extrêmement tentant, mais quand on commence à utiliser system, c'est qu'on a pas compris le problèmeque l'on essaie de résoudre. System est bloquant, et ne rendra pas la main à GTK tant que tu n'auras pas fermé l'autre application. Pendant ce temps là, ton appli GTK est gelée, comme si elle avait planté. Je te conseille donc l'utilisation de g_spawn_async ou (plus simple) g_spawn_command_line_async.
    g_spawn_command_line_async() fonctionne parfaitement. Merci pour la réponse !

    Eric.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/01/2012, 09h37
  2. Problème de compilation en mode console
    Par fredonouille dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 18/03/2008, 10h10
  3. Réponses: 12
    Dernier message: 05/04/2007, 15h18
  4. mode console/mode window !
    Par gdpasmini dans le forum MFC
    Réponses: 2
    Dernier message: 27/03/2006, 16h25
  5. Réponses: 1
    Dernier message: 02/02/2006, 11h10

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