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 :

Capturer le pointeur de la souris


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de diesel83
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2014
    Messages : 57
    Par défaut Capturer le pointeur de la souris
    Bonsoir,

    Qui peut me dire comment capturer le pointeur de la souris dans un widget ?.

    La capture serait activée suite à un clic gauche de la souris alors que le pointeur de la souris serait sur le widget. Tant que le bouton gauche de la souris resterait appuyé, les événements de position de la souris ne seraient adressés qu'à mon widget. Dès que le bouton gauche de la souris serait relâché, le pointeur serait libéré et le comportement redeviendrait "normal".

    Jean-Marie

  2. #2
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut
    Il me semble qu'il y a eu une discussion sur ce forum pour savoir si on pouvait commander la position du pointeur de la souris par programme et si je me souviens bien, la réponse est NON, car il est assez déroutant pour l'utilisateur de voir celui-ci se balader sur l'écran sans qu'il ne bouge le mulot.

    Par contre, si tu veux détecter la position du pointeur et l'état des touches de la souris, il faut écrire un "event handler" connecté au signaux définis pour GtkWidget comme par exemple
    “key-press-event” (https://developer.gnome.org/gtk3/sta...ey-press-event)
    ou “motion-notify-event”
    et exploiter les données disponibles dans la structure correspondante
    par exemple GdkEventMotion (https://developer.gnome.org/gdk3/sta...GdkEventMotion)

    Tu dois pouvoir trouver des exemples sur le net.

  3. #3
    Membre averti Avatar de diesel83
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2014
    Messages : 57
    Par défaut
    Merci pour la réponse, mais ce n'est exactement la question qui était posée.

    Je sais me connecter aux évènements pour détecter l'appui sur un bouton ou le relâcher, ainsi qu'être prévenu des déplacements du pointeur.

    Ce que je veux, c'est continuer à être prévenu même si le pointeur sort du widget (tant que le bouton gauche de la souris reste appuyé).

    Un peu l'équivalent du focus pour ce qui est de la saisie clavier.

    Jean-Marie

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 312
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Sans avoir essayé je partirais de ce principe.

    Si tu désires connaître la position de la souris en dehors d'un widget, il te faut capturer sa position sur tout l'écran. Il te faut donc récupérer la fenêtre root. J'utiliserais à cette fin la fonction GdkWindow *gdk_get_default_root_window (void);.
    On peut à partir de maintenant ajouter l'écouteur GDK_POINTER_MOTION_MASK avec la fonction void gdk_window_set_events (GdkWindow *window, GdkEventMask event_mask);.

    Il ne reste plus qu'à connecter un callback à cet écouteur avec la fonction g_signal_connect();. Vu que les GdkWindow héritent directement des GObject ca ne devrait pas poser de problème.

    J'insiste sur le fait que je n'ai jamais tenté ce genre d'opération. Ce n'est qu'une idée à creuser...

  5. #5
    Membre averti Avatar de diesel83
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2014
    Messages : 57
    Par défaut
    Bonsoir Gérald3d,

    Merci pour ta réponse.

    Je vais utiliser ces éléments dans google et j'espère bien y trouver une réponse définitive.

    C'est par exemple comme ça que fonctionne le widget GtkScale. J'ai regardé le code, mais il est vraiment très compliqué (et dépend de tout un tas d'autres fichiers). Au moins, ça démontre que c'est possible.

    Jean-Marie

  6. #6
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut
    Effectivement, je n'avais pas compris ton problème.

    J'ai essayé de voir se qui se passe sous GTK+-2 (Linux), et au moins dans ce cas, il semble qu'il n'y a rien de particulier à faire: tant que le bouton de la souris reste enfoncé, le handler continue de recevoir les coordonnées du pointeur et c'est seulement quand je relâche le bouton que le widget je perd le focus, ou plutôt qu'un nouveau clic me le fait perdre.
    J'ai ainsi testé avec Gimp en selectionnant un rectangle et GraceGTK.

    Avec les version récentes de Gimp, comme le GC XOR à disparu, le test peut ne pas être significatif car ils ont dû bidouiller pour obtenir un comportement équivalent et GraceGTK n'est pas encore près à passer à GTK+-3.

    Ceci peut faire penser que si ça ne marche pas chez toi comme tu le souhaite, c'est peut être simplement une question de choix pour le mode de fonctionnement du focus: c'est peut être une piste à suivre.

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

Discussions similaires

  1. Changer le pointeur de la souris
    Par jolann69 dans le forum 4D
    Réponses: 1
    Dernier message: 13/06/2006, 08h40
  2. [MFC] Changer la forme du pointeur de la souris
    Par Philippe320 dans le forum MFC
    Réponses: 2
    Dernier message: 03/12/2005, 11h30
  3. Réponses: 5
    Dernier message: 23/08/2005, 12h08
  4. Capturer les event de ma souris en dehors de mon appl
    Par bpy1401 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 28/07/2005, 16h59
  5. modifier pointeur de la souris au survol d'une case
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/06/2005, 17h54

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