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
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
le message WM_HOTKEY
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 ON_MESSAGE(WM_HOTKEY, OnHotKey)
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 ); }
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
Peut etre qu'il existe une autre solution ???
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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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.
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 :
Ainsi que la fonction OnkeyPress :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ON_NOTIFY(NM_KEYDOWN,IDD_MAINDLG,OnkeyPress)
et bien sur dans le .h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void MainDLG::OnkeyPress(NMHDR* pNMHDR, LRESULT* pResult) { AfxMessageBox("KeyPressed"); }
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....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 afx_msg void OnkeyPress(NMHDR* pNMHDR, LRESULT* pResult);
Salut,
Il faut que tu mettes
L'id que tu dois mettre dans le ON_NOTIFY est l'id du controles qui doit te renvoyer l'event.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ON_NOTIFY(NM_KEYDOWN,IDD_CHILD_CTRL,OnkeyPress)
..................................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 :
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
3 WND = new MainDLG(); WND->Create(IDD_MAINDLG,theApp.GetMainWnd()); WND->ShowWindow(SW_SHOW);
Plus les ON_NOTIFY pour les keys .. :
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)
et jamais il va dans mon OnKeyPress
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)I donunderstand
![]()
Bon, regarde du coté de la fonction PreTranslateMessage, tu devrais peut-être trouver ton bonheur.
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 :
la fonction MFCDoIt est appelé automatiquement par le logiciel qui utilise ce plugin...
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; }
ensuite je fais tout dans ma classe MainDLG qui herite de CDialog... cette classe contient quelques controles :
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...
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
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
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
Partager