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 :

Passer des arguments par les signaux des event-box


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut Passer des arguments par les signaux des event-box
    Bonjour à tous,

    J'ai fait un jeu de plateau avec des boutons, les images se déplacent en fait sur les boutons pour représenter les cases. Mais il y a une bordure qui rends le damier très peu esthétique. On m'a donc conseillé de passer aux EventBox mais le problème est que je n'arrive pas à donner des arguments avec la fonction g_signal_connect, avec les boutons tout marche bien avec les event box mes pointeurs mauvais.

    Un petit exemple :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    void action(GtkWidget* widget, gint *data)
    {
        printf("%d\n",*data);
    }
     
    int
    main (int argc, char *argv[])
    {
        GtkWidget *window;
        GtkWidget *event_box;
        GtkWidget *label;
        gint *data;
     
        data = g_malloc(sizeof(gint));
        *data = 4;
     
        gtk_init (&argc, &argv);
     
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
     
        gtk_window_set_title (GTK_WINDOW (window), "Event Box");
     
        gtk_signal_connect (GTK_OBJECT (window), "destroy",
                            GTK_SIGNAL_FUNC (gtk_exit), NULL);
     
        gtk_container_border_width (GTK_CONTAINER (window), 10);
     
        /* Création d'un EventBox et ajout de celui-ci dans la fenêtre. */
     
        event_box = gtk_event_box_new ();
        gtk_container_add (GTK_CONTAINER(window), event_box);
        gtk_widget_show (event_box);
     
        /* Création d'un long label */
     
        label = gtk_label_new ("Cliquez ici pour quitter, quitter, quitter, quitter, quitter");
        gtk_container_add (GTK_CONTAINER (event_box), label);
        gtk_widget_show (label);
     
        /* Placement serré. */
     
        gtk_widget_set_usize (label, 110, 20);
     
        /* Attachement d'une action à celui-ci. */
     
        //gtk_widget_set_events (event_box, GDK_BUTTON_PRESS_MASK);
        g_signal_connect (GTK_OBJECT(event_box), "button_press_event",
                            G_CALLBACK(action), data);
     
        /* Encore une fois, vous avez besoin d'une fenêtre X pour... */
     
        //gtk_widget_realize (event_box);
        //gdk_window_set_cursor (event_box->window, gdk_cursor_new (GDK_HAND1));
     
        gtk_widget_show (window);
     
        gtk_main ();
     
        return 0;
    }
    Et donc ce programme quand on clique doucement sur le label, il affiche 4 mais quand on clique trop vite il m'affiche 4 5 6 et 7.

    Pourquoi ?...

    Merci pour votre aide d'avance

  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
    Le prototype à utiliser pour la fonction appelée comme callback est différent en fonction du signal utilisé. Dans ton cas, il manque un argument au callback que tu as attaché à button-press-event, tu peux le voir ici par exemple.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut
    Super, ça marche. Pourtant ce bout de code provient du net.

    en tout cas merci beaucoup, j'ai passé une journée sur ce problème et j'ai enfin la solution.

    A bientôt

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/08/2009, 13h41
  2. [AJAX] Passer les valeurs des checkbox par GET
    Par Mr Adnanox dans le forum AJAX
    Réponses: 4
    Dernier message: 11/05/2009, 00h57
  3. Réécrire les urls des SSI par mod_rewrite?
    Par Jo___ dans le forum Apache
    Réponses: 1
    Dernier message: 28/11/2006, 14h38
  4. Passage des arguments par le shell
    Par panda31 dans le forum C
    Réponses: 8
    Dernier message: 09/11/2005, 11h53

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