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

GLUT Discussion :

Comment Gérer le double clic?


Sujet :

GLUT

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut Comment Gérer le double clic?
    Salut,
    J'ai des petits problemes de gestion de souris. Je voudrai repérer les doubles clic avec glut ainsi que les clic ou la personne reste appuyé sur le bouton de la souris. Quelqu'un sait comment faire?
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Par défaut
    Pour ce qui est de savoir si l'utilisateur reste appuyé sur le bouton de la souris il faut que tu contrôles l'état du bouton et que tu affectes une variable booléenne en conséquence.

    Code python : 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
    left_button = 0
     
    def mouseFunc(*args):
         global left_button
     
         ...
         if args[0] == GLUT_LEFT_BUTTON:
             if args[1] == GLUT_DOWN:
                 left_button = 1
             else:
                 left_button = 0
         ...
     
    def main():
        ...
        glutMouseFunc(mouseFunc)
        ...
    Code c++ : 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
    bool left_button = false
     
    void mouse(int button, int state, int x, int y) {
        if(button == GLUT_LEFT_BUTTON) {
            if( state == GLUT_DOWN )
                left_button = true;
            else
                left_button = false;
        }
    }
     
    int main(int argc, char** argv) {
        ...
        glutMouseFunc(mouseFunc);
        ...
    }

  3. #3
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Pour le double clic, à mon souvenir, il faut le faire à la main, en pseudo code cela ressemblerait à ceci:

    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
     
    Fonction GestionClicSimple
                Arrêter le timer (si nécessaire)
                Gestion de l'autre clic (si nécessaire)
                 Mettre le timer en place
                 Enregistrer temps du clic et position
    Fin
     
    Fonction GestionDoubleClic
       Faire ce que tu veux
    Fin
     
    Fonction EvenementClic
      Si un autre clic c'est produit il y a moins de x millisecondes ET
          la position est identique (ou presque) alors
                Arrêter le timer
                GestionDoubleClic
         Sinon
                GestionClicSimple
      Fin Si
    Fin
    Le timer permet de lancer la gestion du clic après x+1 millisecondes par exemple...

    Jc

  4. #4
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut
    Ok merci pour le double clic ca marche. En ce qui concerne le simple clic enfait ca marche mais c'est ce que j'avais deja fait. Ce qui m'interesse enfait c'est de pouvoir faire la difference entre un clic simple et un clic ou il reste appuyé. Il faut le faire à la main comme le double clic en jouant sur le temps?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Par défaut
    Ce qui caractérise un clic c'est l'ensemble de 2 mouvements la pression de la touche et le relachement donc en théorie si tu presses la touche, que tu la maintient enfoncée et que tu la relache : c'est un clic.

    Je pense qu'il y a plusieurs manières de les différencier, tout dépend de l'utilisation que tu veux faire de ces différentes actions.

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par drcd
    Ok merci pour le double clic ca marche. En ce qui concerne le simple clic enfait ca marche mais c'est ce que j'avais deja fait. Ce qui m'interesse enfait c'est de pouvoir faire la difference entre un clic simple et un clic ou il reste appuyé. Il faut le faire à la main comme le double clic en jouant sur le temps?
    Désolé, j'ai loupé cette partie de la question, non, il y a 2 fonctions dédiées pour le mouvement de la souris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void  glutMotionFunc( void (* callback)( int, int ) );
     
    void glutPassiveMotionFunc( void (* callback)( int, int ) );
    La première est lorsque la souris bouge avec un ou plusieurs boutons appuyé(s) et l'autre lorsque la souris bouge et aucun bouton n'est appuyé.

    Les paramètres sont bien sûr la position actuelle de la souris et donc il faut mettre en mémoire globale (beurk) quelque part quel bouton a été appuyé si tu dissocies les boutons...

    Inutile de dire que le code de ces fonctions callback doivent être rapides sinon tu vas détruire l'efficacité et la rapidité de ton programme...

    Jc

  7. #7
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut
    Mais ces fonctions aussi je les utilise deja. Bon je vais expliqué mon projet ca ira peut etre mieux. Enfait je veux faire un moteur 3D. Pour l'instant la partie 2D:sprite,clavier et son fonctionnent. Et je suis sur la souris. Mon moteur est organisé en classe donc j'ai pas de variables globales. Ma classe Mouse a 4 fonctions qui remplissent les données de classe:
    -Manage():Utilisé pour mettre à true ou a false les données membres indiquant le simple et le double clic.
    -ManageEntry(): utilisé pour dire si le pointeur de la souris est dans la fenetre ou pas(peu d'utilité mais ca coute rien de l'implementer)
    -ManageMotion():utilisé pour le drag n drop(pour l'instant c'est elle qui met a true ou a false les données membres indiquant si un bouton reste appuyé ou non.
    -ManagePassiveMotion():Recupere la position de la souris à tout moment

    Le probleme c'est que il se peut que le joueur reste appuyé sans qu'il bouge la souris. Et à ce moment la mon moteur detecte un clic simple et non un clic ou il reste appuyé.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/11/2006, 21h10
  2. Réponses: 5
    Dernier message: 28/04/2006, 14h34
  3. comment autoriser le double clic sur un champ desactivé ?
    Par linou dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/04/2005, 17h23
  4. Ouvrir un fichier sur un double-clic dans une TListBox
    Par SegmentationFault dans le forum Composants VCL
    Réponses: 4
    Dernier message: 09/08/2004, 17h22
  5. [débutant] Listview et double-clic
    Par Runlevel dans le forum C++Builder
    Réponses: 12
    Dernier message: 29/06/2004, 19h44

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