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

C Discussion :

Recuperer coordonnees de 2 clics de souris


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Par défaut Recuperer coordonnees de 2 clics de souris
    Bonjour,

    Je post mon code et j explique :

    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
     
    int     main(int argc, char *argv[])
    {
      void  *ptr_mlx_init;
      void  *ptr_mlx_new_window;
      char  *nom_fenetre;
      int   taille_image_pixel_x;
      int   taille_image_pixel_y;
      int   color;
     
      taille_image_pixel_x = 600;
      taille_image_pixel_y = 600;
      nom_fenetre = "trace_ligne";
      color = 0x00FF00;
      ptr_mlx_init = mlx_init();
      ptr_mlx_new_window = mlx_new_window(ptr_mlx_init, taille_image_pixel_x, taille_image_pixel_y, nom_fenetre);
      mlx_mouse_hook(ptr_mlx_new_window, gere_souris, ptr_mlx_new_window); // cette fonction envoie à gere_souris les coordonnees du click
      mlx_loop(ptr_mlx_init); // cette fonction attend qu'un click souris se passe, et appel"mlx_mouse_hook", c est une boucle infinie
      return (0);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int     gere_souris(int x, int y)
    {
      int   x1;
      int   y1;
      int   x2;
      int   y2;
     
      x1 = x;
      y1 = y;
      return (0);
    }
    Mon probleme est que dans ma fonction main j ai ma fonction "mlx_mouse_hook(ptr_mlx_new_window, gere_souris, ptr_mlx_new_window);" qui envoie a chaque click le x et y a ma fonction "gere_mouse", donc pour le premier appel a "gere_mouse" les coordonnées x et y de ma souris sont bien stockées dans x1 et y1, mais ensuite je n'arrive pas a stocker mes coordonnées du deuxieme click dans x2 et y2 .

    Si quelqu un avait une idée??

    Merci

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je ne connais pas la minilibX, mais cela ne peut pas marcher comme cela : il faut bien que la fonction gere_souris() puisse discuter avec le monde extérieur. Telle que tu la proposes, elle n'a que des variables locales qui seront détruites en sortie de fonction.

    La fonction mlx_mouse_hook() prend comme argument la fenêtre , un pointeur sur une fonction F qui sera appelée, mais le troisième argument qui dans ton code est à nouveau la fenêtre semble absurde. La documentation parle pour ce dernier argument d'un pointeur (void *) qui sera transmis à la fonction F lors de son appel.

    La fonction F, passée en argument à mlx_mouse_hook(), doit avoir un prototype précis et dans la liste de ses paramètres, on doit trouver au moins les coordonnées et le pointeur void* qui doivent lui être transmis lors de l'appel. La doc dit int X(int button,int x,int y, void *param); .

    Le paramètre param sert à envoyer à la fonction l'adresse d'une zone mémoire, allouée à l'extérieur de la fonction et qui servira à échanger des informations avec le monde extérieur à la fonction. Il prend souvent la forme de l'adresse d'une structure dont les champs seront définis en fonction du problème à résoudre (et dans ton cas servira, entre autres, à mémoriser la position du premier clic souris et à la récupérer lors du deuxième).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Par défaut
    merci @diogene, comme tu me l as expliqué le probleme etait que les variables perdait leurs valeurs en sortant de la focntion "gere_souris" j'ai donc décider de stocker mes coordonnées de chaques click dans un tableau de structure.

    Voici ma fonction qui semble fonctionner.

    Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct Point Point;
     
    struct Point
    {
      int   x;
      int   y;
    };
    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
     
    int     gere_mouse(int x, int y)
    {
      static Point point[2];
      static int i = 0;
      int   color;
     
      point[i].x = x;
      point[i].y = y;
      color = 0xFF0000;
      if (i == 1)
        {
          i = 0;
          lit_coordonnees(point[0].x, point[0].y, point[1].x, point[1].y);
          drawline(point[0].x, point[0].y, point[1].x, point[1].y, color);
        }
      else
        {
          i++;
        }
      return (0);
    }
     
    void    lit_coordonnees(int x1, int y1, int x2, int y2)
    {
      printf("x1 = %d\n", x1);
      printf("x2 = %d\n", x2);
      printf("y1 = %d\n", y1);
      printf("y2 = %d\n", y2);
    }

Discussions similaires

  1. Recuperer coordonnees lors d'un clic souris win32
    Par fayred dans le forum Windows
    Réponses: 3
    Dernier message: 18/10/2007, 18h40
  2. Réponses: 8
    Dernier message: 14/03/2005, 21h43
  3. Emuler et detecter un clic de souris (G, D, mollette)
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/02/2005, 17h25
  4. Réponses: 2
    Dernier message: 12/07/2004, 11h43
  5. Selection par clic de souris
    Par bilbonec dans le forum OpenGL
    Réponses: 7
    Dernier message: 16/04/2004, 00h25

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