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+ Discussion :

gtkmm problème de rafraichissement


Sujet :

GTK+

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Par défaut gtkmm problème de rafraichissement
    bonjour,

    j'ai besoin d'aide pour une zone de dessin.
    En fait dans cette zone de dessin j'ai des petits cercles qui représentent des personnes, qui changent de position (sans dessin de trajectoire, il saute d'un endroit à l'autre).
    A chaque fois qu'une position est modifiée j'appelle à nouveau la fonction draw qui dessine les points où ils doivent être.


    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
    void MyArea::Draw()
    {	
    	srand(time(NULL));
     
    	Glib::RefPtr<Gdk::GC> gc = Gdk::GC::create(get_window());
     
    	Gdk::Color rouge("red");
    	Gdk::Color noir("yellow");
    	Gdk::Color bleu("blue");
    	get_default_colormap()->alloc_color(rouge);
    	get_default_colormap()->alloc_color(bleu);
    	get_default_colormap()->alloc_color(noir);
     
    	gc->set_foreground(rouge);
     
    	get_window()->clear();
     
    	if(!_mut->is_get() && !_mut->is_get2())
    	{
    		std::map<int,tache*> taches = commu->obtenir_copie_tache();
    		std::map<int,int> actions = commu->obtenir_copie_action();
     
    		std::map<int,tache*>::iterator iterateur;
    		for(iterateur=taches.begin();iterateur!=taches.end();iterateur++)
    		{
    			      get_window()->draw_line(gc,iterateur->second->get_posx(),iterateur->second->get_posy()-5,iterateur->second->get_posx(),iterateur->second->get_posy()+5);
    			get_window()->draw_line(gc,iterateur->second->get_posx()-5,iterateur->second->get_posy(),iterateur->second->get_posx()+5,iterateur->second->get_posy());
    		}
     
    		float angle=64*360;
     
    		for(int i=1;i<=commu->get_nb_exploit();i++)
    		{
    			std::map<int,int>::iterator it;
    			it=actions.find(i);
    			if(it!=actions.end())
    			{
    				gc->set_foreground(noir);
    				std::map<int,tache*>::iterator ite_tache;
    				ite_tache=taches.find(it->second);
    				get_window()->draw_arc(gc,true,ite_tache->second->get_posx()+rand()%20-10,ite_tache->second->get_posy()+rand()%20-10,15,15,0,angle);
    			}
    			else
    			{
    				gc->set_foreground(bleu);
    				std::map<int,tache*>::iterator ite_action;
    				ite_action=taches.find(it->second);
    				get_window()->draw_arc(gc,true,20,20,15,15,0,angle);
    			}
    		}
     
    	}
    }
    Le truc c'est que rien ne se passe tant que je ne déplace pas la souris ou que je déselectionne et resélectionne la fenêtre.
    Dans la classe j'ai un on_expose_event et un on_configure_event qui appelle Draw mais ça n'a pas l'air de suffire pour que le raffraichissement se fasse tout seul.

    voilà....merci

    Log

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Par défaut
    c'est encore moi....
    en fait c'est toute la fenêtre qui ne s'actualise pas, pas que la zone de dessin, le Label également
    N'y a t-il pas une fonction à appeler pour forcer la mise à jour de la fenêtre ?

    Merci à ceux qui pourront m'aider...

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Par défaut
    Bon après pas mal de recherche il faut en fait simplement appeler la méthode queue_draw() dans la méthode de dessin du DrawingArea
    Ca pourra surement servir à d'autres personnes

    merci
    Log

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Par défaut
    ah oui j'oubliais il faut également ajouté la fonction on_timeout et le signal correspondant
    raffraichissement de la fenêtre de façon globale toutes n secondes que l'on précise dans la connection du signal

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

Discussions similaires

  1. [MFC] Problème de rafraichissement,
    Par pykoon dans le forum MFC
    Réponses: 1
    Dernier message: 27/04/2005, 07h21
  2. Problème de rafraichissement.
    Par beyo dans le forum ASP
    Réponses: 5
    Dernier message: 18/03/2005, 16h27
  3. [SWING] Problème de rafraichissement
    Par david71 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/05/2004, 15h38
  4. [JTree]problème de rafraichissement
    Par peppena dans le forum Composants
    Réponses: 9
    Dernier message: 20/01/2004, 14h06
  5. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15

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