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

Windows Discussion :

double click sur un bouton


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut double click sur un bouton
    Hello !!

    J'ai un petit probleme... Je code une IHM disposant de bouton classique. J'aimerais savoir cmt coder le faire un double click dessus...

    voila comment je notifie l'évenement "clicker sur les boutons de ma denetre principale"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    case WM_COMMAND: 
        if( (HWND)lParam == boutonQuitter) 
            ...
     
        elseif((HWND) lParam == boutonLecture)
           ...
    
    Merci d'avance !!

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    comme il est dit dans la doc :

    http://msdn.microsoft.com/library/de...WM_COMMAND.asp

    wParam The high-order word specifies the notification code if the message is from a control. If the message is from an accelerator, this value is 1. If the message is from a menu, this value is zero.

    The low-order word specifies the identifier of the menu item, control, or accelerator.
    il faut donc prendre le mot de poids faible et faire un switch avec celui-ci. Attention, boutonQuitter et boutonLecture doivent être des identifieurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       case WM_COMMAND:
          Select=LOWORD(wParam);
          switch(Select)
          {
          case boutonQuitter:
             //ici le code pour le bouton quitter
             break;
          case boutonLecture:
             // code pour le bouton lecture
             break;
          }
             return 0; // on doit retourner 0 si l'application a bien prise en compte WM_COMMAND

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Ok mais ceci ne défini pas le type d'evenement... Ceci est valable pour un click simple mais pour un double click ?? Y a t'il quelque chose a modifier ??

    Mercipour le coup de main !!

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    oups, pardon j'avais omis le "double-click".

    Là c'est un peu "tricky" car il me semble que l'api windows ne permet pas de gèrer directement le double click sur un bouton.

    Il existe bien un message pour cela : WM_LBUTTONDBLCLK


    Seulement on obtient uniquement l'endroit du double-click de la souris en coordonnées, et non pas "sur quel control le double-click est tombé".

    d'après la doc de WM_LBUTTONDBCLCK on voit ceci :

    lParam :

    The low-order word specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.

    The high-order word specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
    Donc, je propose ceci :

    On récupère les coordonnées du bouton à tester via GetWindowRect() ce qui nous donne une structure RECT.
    Si un double click arrive, on le recoit via le message WM_LBUTTONDBCLCK, puis on regarde si notre point (structure POINT acquise via le message) tombe dans le rectangle (structure RECT) de la fenêtre via l'API PtInRect().

    Hmm j'avoue que c'est un peu alambiqué... il exite peut être une meilleure solution mais je ne vois pas pour l'instant...

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Ok merci bcp !!

    je vais tenter ca ... mais sans vouloir abuser, j'aimerai revenir sur le switch que tu as proposé dans ton premier post.

    Moi j'ai déclaré tout mes boutons avec des createwindow... Les parametres boutonQuitter ne sont donc pas des identifiers si ?? Est ce que je peux faire un switch du meme genre ds le WM_COMMAND ?? ca me semblerai plus propre.

    Merci encore pour tes conseils !!

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Si un double click arrive, on le recoit via le message WM_LBUTTONDBCLCK
    si c'est le bouton qui est double cliqué, c'est lui qui recevra WM_LBUTTONDBCLCK, pas toi. Le comportement du bouton est de considérer qu'il s'agit de 2 clics différents. Si tu veux modifier ce comportement, il faut subclasser. Là tu pourras intercepter le WM_LBUTTONDBCLCK du bouton, et remplacer son traitement par le tiens. Mais je vois pas trop ce que tu peux faire, car au 1° clic le bouton réagit en se redessinant enfoncé, au relâché il se redessine normal et considère qu'il y a eu clic. J'arrive pas à imaginer comment le bouton devrait réagir le bref temps que dure le double clic.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Oki merci bcp pour vos réponses.

    en fait, mon probleme est que lorsque l'on click sur mon bouton, bcp de choses se lancent. Or si qqun de malintentionné appui de facon répété sur le di bouton, mon logiciel a tendance a mal réagir. J'aimerai donc blinder tout ca.


    merci encore pour vos conseils !!!

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    C'est pas un double clic, ce sont 2 clics rapprochés. Il suffit de griser ton bouton dès qu'il est cliqué le temps nécessaire à ce que le traitement se termine...

Discussions similaires

  1. double click sur bouton n'accède plus à la fonction sur VS2012 ?
    Par PatricePatrice dans le forum Visual Studio
    Réponses: 1
    Dernier message: 21/04/2014, 18h01
  2. Détecter click sur le bouton de l'application dans Taskbar
    Par bob2553 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 22/08/2005, 22h34
  3. Réponses: 2
    Dernier message: 26/07/2005, 15h35
  4. Automatiser le click sur le bouton d'un msgbox
    Par rootdaoud dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/05/2005, 10h31
  5. click sur le bouton + de jdbnavtoolbar
    Par hamido dans le forum JBuilder
    Réponses: 4
    Dernier message: 28/05/2004, 00h10

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