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 :

Evènement clavier : ne fonctionne pas


Sujet :

wxWidgets

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut Evènement clavier : ne fonctionne pas
    hello,

    Je n'arrive pas à intercepter un évènement clavier dans mon application :
    1) J'ai ce problème uniquement sur Linux (Sur windows ça fonctionne très bien)
    2) J'ai ce problème seulement depuis que j'ai téléchargé la version 2.8.7

    Voici mon code simplifié (.h):
    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
    class myFrameMain : public wxFrame
    {
    	public:
    		myFrameMain();
     
    	private:
    		myGLCanvas *glCanvas;
    };
     
    class myGLCanvas : public wxGLCanvas
    {
    	public:
    		myGLCanvas(myFrameMain *, int *);
     
    	private:
    		wxGLContext *glContext;
    		void onKeyDown(wxKeyEvent &);
     
    		DECLARE_EVENT_TABLE()
    };
    .cpp :
    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
    myFrameMain::myFrameMain() : 
    wxFrame(NULL, -1, "Title", wxPoint(-1, -1), wxSize(800,600), wxDEFAULT_FRAME_STYLE|wxSTAY_ON_TOP)
    {
    	int attribsList[] = {WX_GL_RGBA, WX_GL_MIN_RED, 1, WX_GL_MIN_GREEN, 
    1, WX_GL_MIN_BLUE, 1, WX_GL_MIN_ALPHA, 1, WX_GL_STENCIL_SIZE, 1, 
    WX_GL_DEPTH_SIZE, 1, WX_GL_DOUBLEBUFFER, 0};
    	glCanvas = new myGLCanvas(this, attribsList);
    	wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
    	sizer->Add(glCanvas, 1, wxALL|wxEXPAND, 0);
    	SetSizer(sizer);
    }
     
    myGLCanvas::myGLCanvas(myFrameMain *parent, int *attribsList) : 
    wxGLCanvas(parent, -1, attribsList, wxPoint(0,0)), glContext(new wxGLContext(this))
    {
    	//...
    }
     
    void myGLCanvas::onKeyDown(wxKeyEvent &event)
    {
    	//ne passe jamais ici !!!!!!
    }
     
    BEGIN_EVENT_TABLE(myGLCanvas, wxGLCanvas)
    	EVT_KEY_DOWN(myGLCanvas::onKeyDown)
    END_EVENT_TABLE()
    Voila j'espère ne pas avoir oublié de code qui pourrait servir à résoudre le problème, autrement demandé moi, merci d'avance

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Bizarre...

    Et avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    myGLCanvas::myGLCanvas(myFrameMain *parent, int *attribsList)
    ....
    {
    Connect(GetId(), wxEVT_KEY_DOWN,  wxKeyEventHandler(myGLCanvas::onKeyDown));
    }
    A la place de la macro ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut
    Désolé pour cette réponse tardive :

    J'ai exactement le même problème avec Connect.
    Je viens de tester avec la nouvelle version 2.8.8 de wxWidgets et ça ne change rien non plus.

    Une idée ?

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Essaye de te connecter sur la frame au lieu de myGLCanvas.

    Si cela fonctionne, tu pourras faire une redirection des events vers ton wxGLCanvas.

    Sinon essaye un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connect(wxID_ANY, wxEVT_KEY_DOWN,  wxKeyEventHandler(myGLCanvas::onKeyDown));

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut
    J'avais déjà essayer de mettre les events sur la frame et je viens de re-tester avec les Connect et ça ne fonctionne pas.

    Et avec wxID_ANY : aucun changement.


  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut
    Après différent test, j'arrive à faire fonctionner les évènements clavier mais c'est plutôt bizarre :

    Voici tout mes évènements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Connect(wxEVT_IDLE,  wxIdleEventHandler(myGLCanvas::onIdle));
    Connect(wxEVT_SIZE,  wxSizeEventHandler(myGLCanvas::onSize));
     
    Connect(GetId(), wxEVT_KEY_DOWN,  wxKeyEventHandler(myGLCanvas::onKeyDown));
    Connect(GetId(), wxEVT_KEY_UP,  wxKeyEventHandler(myGLCanvas::onKeyUp));
    Connect(GetId(), wxEVT_CHAR,  wxKeyEventHandler(myGLCanvas::onChar));
     
    Connect(GetId(), wxEVT_LEFT_DOWN,  wxMouseEventHandler(myGLCanvas::onMouseLeftDown));
    Connect(GetId(), wxEVT_LEFT_UP,  wxMouseEventHandler(myGLCanvas::onMouseLeftUp));
    Connect(GetId(), wxEVT_RIGHT_DOWN,  wxMouseEventHandler(myGLCanvas::onMouseRightDown));
    Connect(GetId(), wxEVT_RIGHT_UP,  wxMouseEventHandler(myGLCanvas::onMouseRightUp));
    Connect(GetId(), wxEVT_MOTION,  wxMouseEventHandler(myGLCanvas::onMouseMove));
    Si je commente l'évènement wxEVT_LEFT_DOWN, mes évènements clavier fonctionne !!!
    Plutôt bizarre, non ? surtout que dans la fonction myGLCanvas::onMouseLeftDown, je ne fait appel à aucun composant de wxWidgets.

    Une idée ?

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Si tu places dans ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void myGLCanvas::onMouseLeftDown(wxKeyEvent &event)
    Cela améliore les choses ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut
    Merci pour ta réponse, ça fonctionne mais (bien sur, il fallait un "mais") : l'évènement onChar ne fonctionne plus

    J'ai bon lire la doc pour comprendre ce que fait exactement Skip, j'ai un peu de mal avec mon faible niveau d'anglais.
    J'ai aussi essayé de mettre un Skip à chaque évènement et mon onChar ne fonctionne pas mieux

  9. #9
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Dans la Doc il signale les choses "bizarre"

    http://docs.wxwidgets.org/2.8.8/wx_wxkeyevent.html

    Sous Windows:
    eg: In particular, Alt-x combination will generate a char event in wxWidgets (unless it is used as an accelerator).
    Donc si tu fais Alt+X tu devrais déclencher un wxEVT_CHAR, sauf si tu as une "touche accélération" dessus.

    Skip permet de retransmettre le message, sinon il n'y a que toi qui récupère l'event, et si une couche inférieur à besoin de cet event, il ne pourra le recevoir, ce qui entraine parfois des malfonctions, mais parfois il vaut mieux ne pas appeler skip niveau performance... tout dépend du cas

    Mais bon dans la très grande majorité des cas il faut appeler skip.

    Avec onKeyUp et onKeyDown tu devrais t'en sortir

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

Discussions similaires

  1. [C#] Hook Clavier qui ne fonctionne pas
    Par NeoKript dans le forum C#
    Réponses: 5
    Dernier message: 18/12/2009, 14h50
  2. Evénement onload qui ne fonctionne pas
    Par nomasis dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 25/08/2009, 12h30
  3. Réponses: 1
    Dernier message: 19/05/2008, 15h08
  4. raccourci clavier ne fonctionnant pas
    Par vinc-mai dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/02/2008, 17h58
  5. Clavier ne fonctionne pas portable ASUS
    Par phy4me dans le forum Périphériques
    Réponses: 6
    Dernier message: 09/10/2007, 18h38

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