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 :

Rafraichissement d'une box en particulier


Sujet :

GTK+ avec C & C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut Rafraichissement d'une box en particulier
    Bonjour !

    J'ai vu qu'il y avait déjà des questions ressemblant a celle a venir sur le fofo, mais aucune ne me donnant la bonne réponse, désole d'avance si doublon il y a !

    Alors je développe en ce moment un jeu de labyrinthe, sous Gtk, en C.

    Mon problème vient du rafraichissement de l'image du labyrinthe :
    celle-ci se compose de cases, qui sont elles mêmes des images. J'ai donc des Hbox qui contiennent une ligne d'images, ces Hbox sont contenues dans une Vbox, que l'on appellera...hummm...Boiboite pour s'y retrouver.

    Boiboite est contenue dans une box générale, entre autres box, menus et compagnie.

    Le délire serai en fait de mettre a jour Boiboite, elle et elle seule, lors du déplacement du personnage dans le labyrinthe.
    Donc au déclenchement de la réaction générée par le pressement (pressation ?) d'une flèche directionnelle, je recharge la grille (board) du labyrinthe, re-fabrique mon image (Boiboite), et veux actualiser Boiboite dans la fenêtre, sans avoir a refaire cette fenêtre.

    Une idée ?

    Merci d'avance !

    PS : j'ai déjà essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (gtk_events_pending ())
    {
      gtk_main_iteration ();
    }
    sans succès, sans trop avoir compris ce que j'essayais, mais quand même !

    Et pour être plus complet :
    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
     
    void on_key_press(Board *board, GdkEventKey *event)
    {
      switch (event->keyval)
      {
        case _LEFT:
                      player_move(board, LEFT); // Board = matrice du labyrinthe, player_move la redessine
                      break;
        case _UP:
                      player_move(board, UP);
                      break;
        case _RIGHT:
                      player_move(board, RIGHT);
                      break;
        case _DOWN:
                      player_move(board, DOWN);
                      break;
      }
      boxlabyrinthe = gtk_vbox_new(FALSE, 0); // Creation container vertical
      lab(board, boxlabyrinthe); // Remplissage de Boiboite avec des petites images
      gtk_widget_draw(GTK_WIDGET(boxlabyrinthe), NULL);
      //gtk_widget_show_all(pWindow); // Affichage fenetre
      //gtk_container_add(GTK_CONTAINER(pWindow), boxlabyrinthe);
      //gtk_widget_show(boxlabyrinthe);
      //affichage_fenetre(pWindow,boxlabyrinthe);
    }
    Avec void lab(Board *board, GtkWidget *boiboite)

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut
    Personne n'a d'idée ?

    Je jettes un œil cote pixmaps en ce moment, le soucis étant que la fonction prends une fenêtre en paramètre pour afficher une image, or mon image se compose elle-même d'un petit paquet d'images, et créer de la fenêtre a la volée, bof bof.

  3. #3
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    boxlabyrinthe = gtk_vbox_new(FALSE, 0); // Creation container vertical
      lab(board, boxlabyrinthe); // Remplissage de Boiboite avec des petites images
     
      // Ca sert à quoi ca ? (je connais pas :))
      // gtk_widget_draw(GTK_WIDGET(boxlabyrinthe), NULL);
     
      gtk_widget_show_all(boxlabyrinthe);
    Ca peut tout simplement venir de la, parfois GTK nous joue des tours cruels.
    en fait tu peux pas actualiser en mettant show all (window) parce que ca a deja été fait.
    C'est donc bien la box qu'il faut afficher (car tu viens de la créer), mais pour voir ce qu'il y'a dedans, tu dois utiliser show all et non pas show

    Voilou ca doit marcher comme ca

    Par contre je veux bien que tu m'explique le draw, je connais pas, et je m'en suis jamais servi dans des circonstances comme celles ci.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Par défaut
    Salut !

    Je ne m'attendais pas a avoir une réponse un jour :p

    1) Gtk_widget_draw force le redessin (redessinement ? ca passe pas au correcteur d'otrhographe :p) d'un widget, en théorie. Sachant que je l'ai seulement utilisée dans le cas ci-dessus, et qu'elle n'a donc jamais marche, je ne sais pas exactement ce que cette fonction fait ^^

    2) show_all ne fonctionnait pas non plus.

    En fait, je crois simplement que je n'utilisait pas du tout la bonne approche. Un container n'est pas prévu pour être une "zone d'affichage", et donc ne se rafraichit pas en tant que tel (tout du moins, c'est ce que j'en ai compris).

    Pour le suivants, je vais expliquer un poil la méthode que j'ai fini par utiliser :
    Pour des raisons pratiques, j'en suis arrivé a remplir la box avec une table, d'une taille max (celle du labyrinthe de la taille max)
    2 problèmes : si l'on souhaite faire un labyrinthe plus petit, les operations de traitement sont plus nombreuses. Aussi, toujours en cas de labyrinthe plus petit, la taille de la fenêtre d'affichage est identique a la taille de la table. Sachant que certaines cases de la table seront vides (ou remplies de blanc par exemple), ça fait une marge moche.

    Ensuite, il faut bien comprendre qu'un widget est un pointeur sur widget. Donc quand dans ma génération de l'affichage, je n'utilisait qu'un seul widget *image que je rechargeais a chaque fois, je tuais le pointeur, donc tuais ma seule référence vers l'adresse de l'image.

    Solution : j'ai crée une liste chainée, chaque maillon représentant une image, contenue dans une case de la table. Cela permet de changer une image a l'unité sans recharger tout l'écran.
    Astuce : La seule fonction qui associe les mots "image" et "set" sont dans la fonction gtk_set_image_from_pixbuf(GtkPixbuf *pix).
    L'astuce consiste donc a charger l'image dans un widget, d'extraire le pixbuf de cette image (gtk_get_pixbuf, un truc dans le genre) et ensuite de le placer dans l'image qui nous intéresse a l'aide de la fonction ci dessus.

    Voila voila, je n'ai pas le code sous la main pour illustrer, mais l'idée est la.

  5. #5
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    oki
    C'est de toute facon plus propre de faire comme ca, c'est certain

    Merci d'avoir posté l'astuce en tout cas

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/09/2006, 11h52
  2. Réponses: 11
    Dernier message: 24/01/2006, 10h20
  3. Problème de "rafraichissement" dans une edit box e
    Par X-K4l1 dans le forum Windows
    Réponses: 1
    Dernier message: 23/08/2005, 11h49
  4. Showmodal puis rafraichissement d'une table
    Par navis84 dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/03/2005, 08h09
  5. [MFC] probleme de rafraichissement d'une image
    Par Vestaproman dans le forum MFC
    Réponses: 6
    Dernier message: 09/01/2004, 23h59

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