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

MFC Discussion :

Event ne fonctionnant pas


Sujet :

MFC

  1. #1
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut Event ne fonctionnant pas
    Bonjour,

    Je cherche a ajouter des evenements comme l'appui sur une touche ou le double clique. Jusqu'a present mes evenements de clique droit ou gauche de la souris marchent tres bien et j'ai fait de meme (avec le class wizard) pour ce qui est du clavier et du double clique mais mon programme ne rentre jamais dans ces fonctions.
    Avez-vous une idee de l'origine du probleme ? Parce que la je ne vois pas du tout...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
    afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    BEGIN_MESSAGE_MAP(COpenGLControl, CWnd)
    	ON_WM_PAINT()
    	ON_WM_SIZE()
    	ON_WM_CREATE()
    	ON_WM_TIMER()
    	ON_WM_MOUSEMOVE()
    	ON_WM_RBUTTONDOWN()
    	ON_WM_RBUTTONUP()
    	ON_WM_LBUTTONDOWN()
    	ON_WM_LBUTTONUP()
    	ON_WM_KEYDOWN()
    	ON_WM_RBUTTONDBLCLK()
    END_MESSAGE_MAP()
    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    bonjour

    l'ensemble de ces messages sont defini dans le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxmsg_.h
    Si tu travaille en VS8, normalement en passant la souris dans le message map dans le CPP l'intellisense de donne le #define.

    Verifie que tu as bien le lien vers le fichier.

    Cordialement

  3. #3
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Oui il me donne bien le #define quand je passe la souris dessus mais je ne trouve pas l'include...

    EDIT : ah si il y est ^^
    Bon je ne vois pas quel est le probleme...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Bonjour

    N'as tu pas d'evenment qui se chevauchent?

    essaye d'isoler ton double click en inibant les autres evenements et verifie que tu passe bien dans ta fonction

    cordialement

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Bonjour

    N'as tu pas d'evenment qui se chevauchent?

    essaye d'isoler ton double click en inibant les autres evenements et verifie que tu passe bien dans ta fonction

    cordialement

  6. #6
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    questions betes:

    1- est ce que la classe (WNDCLASS) de ta fenetre a le style CS_DBLCLKS ?
    2- est ce que ta fenetre a le focus pour recevoir les evenements WM_KEYDOWN ?

    @+

  7. #7
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Alors j'ai enleve mes evenements de click droit, gauche et mouvement de la souris mais il ne passe toujours pas dans le double clique ni dans l'appui d'une touche du clavier.

    Ou est-ce que je peux verifier le style CS_DBLCLKS et le focus ?

    Merci pour vos reponses.

  8. #8
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Je pense que concernant le message WM_KEYDOWN, il est nécessaire d'être dans un contrôle permettant la saisie de caractères (par ex, un CEdit) mais une confirmation d'une autre personne serait préférable. Autrement tu peux essayer!

    Pour le double clic droit, c'est bizarre. Je ne vois pas pourquoi cela ne fonctionnerait pas. Ca me surprendrait que cela vienne du paramétrage de ta souris pour gérer l'intervalle de temps entre 2 clics...Mais tu peux jeter un coup d'oeil pour régler la vitesse du double clic.

  9. #9
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Pour la gestion du clavier c'est effectivement un probleme de focus.

    En fait j'ai une fenetre OpenGL dans ma boite de dialogue MFC et j'avais rajoute le focus lors de la creation de cette fenetre OpenGL mais sans succes.

    Par contre j'ai rajoute un SetFocus(); dans ma fonction de click gauche de ma souris et apres il detecte les evenements du clavier.

    Il faut juste que je trouve l'endroit ou mettre ce SetFocus pour que ma fenetre OpenGL obtienne le focus des le lancement du programme.

    Il faut que je verifie si c'est le meme probleme pour le double clique...

    Merci.

  10. #10
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    Pour avoir le focus sur ta fenetre, utilises la fonction SetFocus() --> a mettre dans OnActivate() par ex.

    Comme ton controle est dérivé de CWnd, par défaut, il n'a pas le focus.

    Il faut que ta classe de fenetre mentionne le style CS_DBLCLKS ; pour ça il faut en créer une avec AfxRegisterWndClass() et dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BOOL CMaFenetre::PreCreateWindow(CREATESTRUCT& cs)
    {
      cs.lpszClass=AfxRegisterWndClass(CS_DBLCLKS,LoadCursor(NULL,IDC_ARROW));
      return CWnd::PreCreateWindow(cs);
    }
    et ça devrait marcher

    @+

  11. #11
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Ok merci je vais tester ca pour le double-clique !

    Pour le focus, il fallait que je return FALSE a la fin de initDialog() pour qu'il le prenne en compte...

  12. #12
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Yeah le double-clique fonctionne !

    Merci beaucoup, je n'aurai pas trouve toute seule...
    Je le saurai pour la prochaine fois !

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

Discussions similaires

  1. [Google Maps] Events ne fonctionnent pas pour la deuxième infobulle
    Par ledisciple dans le forum APIs Google
    Réponses: 2
    Dernier message: 03/05/2013, 10h45
  2. event.preventDefault(); ne fonctionne pas !
    Par Shuret dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/12/2010, 09h29
  3. Réponses: 0
    Dernier message: 26/03/2008, 04h57
  4. [asp.net C#] Event onclick ne fonctionne pas
    Par vin100H dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/08/2007, 10h35
  5. event.observe ne fonctionne pas sous IE
    Par mikees dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/06/2007, 18h48

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