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 :

dll win32 basé sur GTK+ 3.0


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 58
    Points : 33
    Points
    33
    Par défaut dll win32 basé sur GTK+ 3.0
    Bonjour,

    Je développe actuellement une dll en C qui utilise quelques fonctions GTK pour créer une interface graphique ....

    C'est un truc vraiment simple mais il me semble que la fonction gtk_main bloque l'IHM et ne rends pas la main a la DLL.
    Comment gérer le GUI dans la DLL ?

    Le but c'est de lancer l'IHM via call de la DLL depuis un autre programme en C

    Merci pour l'aide

    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
    34
     
    #include <gtk/gtk.h>
    static void print_hello (GtkWidget *widget,gpointer   data)
    {
      g_print ("Hello World\n");
    }
     
    static gboolean  on_delete_event (GtkWidget *widget, GdkEvent  *event,              gpointer   data)
    {
      g_print ("delete event occurred\n");
      return TRUE;
    }
     
    int FCT_InitGui(void)
    {
      /* GtkWidget is the storage type for widgets */
      GtkWidget *window;
      GtkWidget *button;
      gtk_init (0, 0);
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window), "Hello");
      g_signal_connect (window, "delete-event", G_CALLBACK (on_delete_event), NULL);
      g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
      gtk_container_set_border_width (GTK_CONTAINER (window), 10);
      button = gtk_button_new_with_label ("Hello World)");
      g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
      g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);
      gtk_container_add (GTK_CONTAINER (window), button);
      gtk_widget_show (button);
      gtk_widget_show (window);
      gtk_main ();
     
      return 0;
    }

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    La fonction gtk_main(); est une boucle infinie. On ne peut en sortir que lors de l'appel à la fonction gtk_main_quit();.

    En partant de là, appeler gtk_main(); depuis une autre fonction que main(); va forcément bloquer une partie de ton application.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Salut,

    Merci bien pour l'aide !
    En revanche, lancer la boucle gtk_main depuis une autre fonction ca va bloquer va l'IHM donc même souci me semble.
    C'est possible jouer le gtk_main dans un thread ?
    Qui peu m'aider avec un petit exemple ?

    Merci d'avance.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    gtk_main(); dans un thread, je pense que tu vas droit vers de gros problèmes.

    En revanche, et c'est ce qui se pratique en générale, lancer le thread principal gtk_main(); et insérer dans sa boucle des appels à des fonctions avec g_timeout_add(); et dérivées.
    Tu peux aussi créer d'autres threads en plus de la boucle gtk_main(); mais il faut faire attention à ne pas vouloir triturer l'IHM depuis ceux-ci.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    merci pour l'aide !
    a+

Discussions similaires

  1. Chat basé sur des sockets php5
    Par javhost dans le forum Développement
    Réponses: 1
    Dernier message: 12/07/2005, 16h21
  2. Comment créer une dll Win32 sous Delphi ?
    Par Mickey.jet dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2005, 15h38
  3. Réponses: 1
    Dernier message: 30/05/2005, 17h02
  4. [forms] Bloc basé sur une clause from
    Par plaineR dans le forum Forms
    Réponses: 11
    Dernier message: 16/12/2004, 12h02

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