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 :

[MFC] Probleme Key Events


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut [MFC] Probleme Key Events
    Bonjour,

    voila, j'ai crée une boite de dialogue (CDialog) MFC et je n'arrive pas à intercepter les touches pressés avec l'event OnKeyDown (et OnKeyUp)... rien ne se passe..

    Help me plizzzzzzzz

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    le message WM_HOTKEY

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON_MESSAGE(WM_HOTKEY, OnHotKey)
    il faut enregistrer préalablement ta HotKey par RegisterHotKey puis la désenregistrer et apres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void
    CAboutDlg::OnHotKey( WPARAM wParam, LPARAM lParam )
    {
     UINT iHotKeyId = (UINT)wParam;
     UINT iOptions = (UINT)HIWORD( lParam );
     UINT iVKeyCode = (UINT)LOWORD( lParam );
     
     CString t;
     t.Format( "HotKey #%i pressed, (%i+%i)", iHotKeyId, iOptions, iVKeyCode );
     AfxMessageBox( t );
    }

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    Merci beacoup pour cette reponse, effectivment ca marche mais il y a un probleme, c'est que c'est une global hotkey et je developpe un plug in pour un logiciel qui a lui aussi ses hotkeys... Comment faire pour que la hotkey ne soit associé que a ma boite de dialogue et non pas a tout WINDOWS...

    Merciiiiiiiii

    Vainsoul

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    Peut etre qu'il existe une autre solution ???

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    Les events de la souris ne sont pas pris en compte egalement... cela doit etre un probleme de handle, focus.. car dans ma boite de dialogue j'ai egalement des sliders etc... et apparement c'est le slider qui shop les events...

    Help me !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Bonjour,
    Ton problème doit venir du fait que ce sont tes contrôles qui attrapent les évènements claviers et souris, si tu veux que ce soit ta dial, regarde du côté de ON_NOTIFY et WM_NOTIFY.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    Merci pour ta réponse mais ca ne marche toujours pas voila ce que j'ai fait.

    Ma boite de dialogue a pour id IDD_MAINDLG, j'ai donc rajouter dans mes message map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON_NOTIFY(NM_KEYDOWN,IDD_MAINDLG,OnkeyPress)
    Ainsi que la fonction OnkeyPress :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void MainDLG::OnkeyPress(NMHDR* pNMHDR, LRESULT* pResult)
    {
       AfxMessageBox("KeyPressed");
    }
    et bien sur dans le .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    afx_msg void OnkeyPress(NMHDR* pNMHDR, LRESULT* pResult);
    Et tout cela ne change rien c'est toujours mes autres controles qui shop l event... Quand j appui sur la touche fleche droite par exemple, c'est le slider qui est inclut dans ma MAINDLG qui intercept l event, le slider avance vers la droite....

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Salut,

    Il faut que tu mettes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ON_NOTIFY(NM_KEYDOWN,IDD_CHILD_CTRL,OnkeyPress)
    L'id que tu dois mettre dans le ON_NOTIFY est l'id du controles qui doit te renvoyer l'event.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    ..................................ARGGGGGGGGGGGHHHHHHHHHHHHHHHHHHH..........

    Ca marche toujours pas .... . En fait ce que je fait c'est un lecteur vidéo... donc dans ma boite de dialogues il y a plusieurs control : boutons (play, pause, stop), sliders (volume et position), un checkbox, et un control pour l image... j'ai essayé d appliquer le ON_NOTIFY a chaque control et meme a tous en meme temps, et cela ne fonctionne pas... voila comment j instancie ma boite de dialogue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	WND = new MainDLG();
    	WND->Create(IDD_MAINDLG,theApp.GetMainWnd()); 
    	WND->ShowWindow(SW_SHOW);
    Dans ma classe MainDLG, j'ai mis tout les messages tels que par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	ON_BN_CLICKED(IDC_PAUSEb, OnBnClickedPauseb)
    	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnNMCustomdrawSliderVol)
    Plus les ON_NOTIFY pour les keys .. :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	ON_NOTIFY(NM_KEYDOWN,IDC_SLIDER2,OnkeyPress)
    	ON_NOTIFY(NM_KEYDOWN,IDC_SLIDER1,OnkeyPress)
    	ON_NOTIFY(NM_KEYDOWN,IDC_STATIC1,OnkeyPress)
    	ON_NOTIFY(NM_KEYDOWN,IDC_CHECK_SYNCRO,OnkeyPress)
    et jamais il va dans mon OnKeyPress I donunderstand

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Bon, regarde du coté de la fonction PreTranslateMessage, tu devrais peut-être trouver ton bonheur.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    Tout d abord je voudrais te remercier de m'aider pour mon probleme...
    Par contre le Pretranslatemsg ne marche pas non plus...
    C'est bizar parcequ'il y a des message qui passe sans probleme tel que OnPaint, OnDestroy, OnClose, OnTimer... mais tout ce qui touche au clavier ou souris.. rien ne passe. Il doit y avoir un truc ke je fait en trop ou que je fais pas... car meme dans le pretranslatemessage rien ne se passe, j'ai juste mi un afxmessagebox dans cette fonction et il s affiche que si je clik sur le menu par exemple mais pas kan j appui sur une touche ou ke je clik avec la souris sur autre chose que le menu... Vraiment je comprend pas... c'est tout bete en + comme code...

    voila comment j'instancie ma boite de dialogue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    __declspec(dllexport)MStatus MFCDoIt(const MArgList& argList)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
     
    	WND = new MainDLG();
    	WND->Create(IDD_MAINDLG,theApp.GetMainWnd()); 
    	WND->ShowWindow(SW_SHOW);
    	return MS::kSuccess;
    }
    la fonction MFCDoIt est appelé automatiquement par le logiciel qui utilise ce plugin...

    ensuite je fais tout dans ma classe MainDLG qui herite de CDialog... cette classe contient quelques controles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	CSliderCtrl c_SliderVol; // slider du volume
    	CButton PlayButton; // bouton play
    	CButton PauseButton; // bouton pause
    	CButton StopButton; // bouton stop
    	CStatic c_Static; // Fenetre vidéo..
    	CSliderCtrl c_Slider; // slider de position ds le media
    	CStatic Status_Bar; // status bar
    	CButton is_sync; // syncronisation avec le logiciel
    	CButton h_rewind; // bouton retour rapide
    	CButton h_foward; // bouton avance rapide
    lorsque j appui sur les touches fléché, le slider de position bouge... mais pas moyen d intercepter... pareil lorque j appuie sur la barre espace c le bouton ki a le focus qui s enclenche...
    En ce qui concerne la souris, c'est kif kif, j intercepte pas les click sur la fenetre... bref c'est la !**df!!§§???...
    Si quelqu'un avait une solution... j'en ai vraiment besoin de ces touches ...

    Merci

    VainSouL

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Salut,
    Don apparemment, ta boite de dialog se trouve dans une dll, et c'est ce qui poserait problème.

    Regarde ce lien, c'est expliqué : http://msdn.microsoft.com/library/de..._.Overview.asp

Discussions similaires

  1. probleme Key event
    Par champity dans le forum Débuter
    Réponses: 2
    Dernier message: 24/04/2009, 17h11
  2. Probleme de Key event sur le module Graphique
    Par Dlieu dans le forum Caml
    Réponses: 5
    Dernier message: 05/12/2007, 18h17
  3. [Irrlicht] Probleme avec event.KeyInput.Key
    Par samiblide dans le forum Irrlicht
    Réponses: 1
    Dernier message: 09/07/2007, 01h46
  4. [MFC ]Probleme de linkage d'une dll
    Par Lysis dans le forum MFC
    Réponses: 9
    Dernier message: 22/01/2004, 14h51
  5. [MFC] probleme de rafraichissement d'une image
    Par Vestaproman dans le forum MFC
    Réponses: 6
    Dernier message: 09/01/2004, 23h59

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