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

wxWidgets Discussion :

Pas de EVT_MOUSEWHEEL


Sujet :

wxWidgets

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut Pas de EVT_MOUSEWHEEL
    Bonjour,

    EVT_MOUSEWHEEL ne fonctionne pas sous Windows

    ...mais ça marche sous linux donc je pense que le code est bon.

    J'ai bien compilé wxWidgets avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define wxUSE_MOUSEWHEEL  1
    J'ai essayé avec les évènements EVT_MOUSEWHEEL et EVT_MOUSE_EVENTS mais aucun résultat.

    Si vous avez des idées ou déjà rencontré ce type de problème, merci.

    wxWidget 2.8.11 + gcc

  2. #2
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Salut.

    Est-ce que tu peux nous poster un peu de code, afin que l'on puisse voir :
    • la façon dont tu crées tes contrôles
    • la méthode utilisée pour connecter les contrôles aux méthodes événementielles


    Il me semble avoir déjà rencontré ce genre de problème, mais il faut que je fasse quelques recherches pour voir comment je l'avais résolu.

    @+
    Xav'

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut
    Je vais essayer de faire simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    BEGIN_EVENT_TABLE(wxMyCtrl, wxPanel)
       EVT_ERASE_BACKGROUND(wxMyCtrl::OnEraseBackGround)
       EVT_MOUSEWHEEL(wxMyCtrl::OnMouseWheel)
       EVT_MOTION(wxMyCtrl::OnMotion)
       EVT_PAINT(wxMyCtrl::OnPaint)
       EVT_RIGHT_DOWN(wxMyCtrl::OnRightDown)
    END_EVENT_TABLE()
     
    wxMyCtrl::wxMyCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size,
          long style, const wxString& name) : wxPanel(parent,id,pos,size,style | wxWANTS_CHARS,name) {
       ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void wxMyCtrl::OnMouseWheel(wxMouseEvent &Event) {
       wxMessageBox(_("MouseWheel event"),_("Information"));
    }

  4. #4
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Est-ce que ton wxPanel possède des contrôles enfants pouvant recevoir le focus ?

    Je viens de faire le test : avec un simple wxPanel et un wxStaticText dessus (pour afficher quelque chose lors de la réception du MouseWheel), il ne se passe rien.

    Avec en plus un bouton (et comme c'est le seul contrôle de la fenêtre qui peut recevoir le focus, il l'a), ça marche sans problème.

    Donc, la solution est de s'assurer que le focus est bien sur le wxPanel lorsque le curseur de la souris s'y trouve.
    Il suffit, pour cela, d'intercepter l'événement "wxEVT_ENTER_WINDOW", et dans la méthode événementielle associée, de mettre un "SetFocus" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BEGIN_EVENT_TABLE(wxMyCtrl, wxPanel)
       ......
       EVT_ENTER_WINDOW(wxMyCtrl::OnEnterWindow)
    END_EVENT_TABLE()
     
    void wxMyCtrl::OnEnterWindow(wxMouseEvent &event) {
       SetFocus();
    }
    Avec ça, ça devrait marcher (en tout cas, ça marche chez moi).

    @+
    Xav'

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut
    Pile dans le mille ! Ça marche.

    En fait ça marchait aussi en cliquant dans le contrôle avant d'utiliser la roulette, mais cette solution me convient parfaitement.

    Merci.

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

Discussions similaires

  1. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  2. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15
  3. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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