[VC++] associer les flèches du clavier à des boutons

associer les flèches du clavier à des boutons [VC++] - C++ - Programmation

Marsh Posté le 05-01-2004 à 11:07:15    

je programme une interface de navigation toute simple sous visual C++
j'ai dans cette interface 4 boutons flèches de direction et un bouton validation
 
je souhaite que lorsque l'on click sur flèche droite ou que l'on appuie sur la flèche droite du clavier, dans les 2 cas soit appelé mon this->OnClick
 
d'où ma question
comment fait on pour associer la touche flèche droite du clavier à un bouton ?
 
PS : pour l'instant je mets &Droite dans caption de mon CButton mais cette solution ne me satisfait pas, ce n'est pas pratique

Reply

Marsh Posté le 05-01-2004 à 11:07:15   

Reply

Marsh Posté le 05-01-2004 à 11:10:27    

ben tu recup le OnKeyPressed (ou dans le genre) en checkant pour VK_LEFT et la tu apelles ta petite fonction,
 
(quoique soudain je me demande si ca marche avec les dialogs box ca)

Reply

Marsh Posté le 05-01-2004 à 11:14:31    

Exemple con (ya p-e mieux):
 

Code :
  1. BOOL CMonDialogueDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
  2. {
  3. switch(nChar)
  4. {
  5.  case VK_RIGHT:
  6.   AfxMessageBox("flèche droite" );
  7.  default:
  8.   AfxMessageBox("ah ben non" );
  9. }
  10. CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
  11. }


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 05-01-2004 à 11:35:36    

faut il que je rajoute un  
afx_msg void OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags );  
quelque part ? car je n'ai pas le message OnKeyUp dans le classwizard de mon CDialog

Reply

Marsh Posté le 05-01-2004 à 11:36:18    

ouais c'est ce que je craignais....
chaipas trop comment faire pour une CDialog...

Reply

Marsh Posté le 05-01-2004 à 11:39:42    

Dans mon exemple CMonDialogueDlg est un CDialog...j'ai repompé ça à-partir d'une appli dalog based.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 05-01-2004 à 11:46:50    

bizarre car onKeyUp le compilo ne connais pas
il connais OnKeyUp  
 
et si je le met dans le .h, c'est bien sympa mais il ne l'appel jamais
je n'arrive pas à chopper l'event onkeyup

Reply

Marsh Posté le 05-01-2004 à 11:49:09    

en plus CDialog hérite de CWnd qui contient OnKeyUp
pourquoi il ne me le propose pas :cry:

Reply

Marsh Posté le 05-01-2004 à 11:51:41    

Tu as p-e besoin d'utiliser PreTranslateMessage pour que le message soit bien récupéré par ta fenêtre?
 
Dans cette appli je fais comme ça :

Code :
  1. BOOL CMonDialogueDlg::PreTranslateMessage(MSG *pMsg)
  2. {
  3. if(pMsg->message == WM_KEYUP)
  4. {
  5.   pMsg->hwnd = this->m_hWnd;
  6. }
  7. return 0;
  8. }


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 05-01-2004 à 12:04:33    

pMsg->hwnd = this->m_hWnd; est bien appelé lors d'un Key_Up, la fin du tunnel est donc proche
par contre aucun appel de onKeyUp
 
pour faire simple, skeye  sais tu si je peux directement récupérer le code touche dans preTranslateMessage ?

Reply

Marsh Posté le 05-01-2004 à 12:04:33   

Reply

Marsh Posté le 05-01-2004 à 12:10:54    

hal a écrit :

pMsg->hwnd = this->m_hWnd; est bien appelé lors d'un Key_Up, la fin du tunnel est donc proche
par contre aucun appel de onKeyUp
 
pour faire simple, skeye  sais tu si je peux directement récupérer le code touche dans preTranslateMessage ?


Je ne pense pas...c'est bizarre que ton OnKeyUp ne soit pas appelé, puisque tu spécifies bien le handle de ta fenêtre comme cible du message...:??:
Je ne vois rien d'autre dans mon appli pour ça...
 
Tu as bien ça:

Code :
  1. afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);


en protected dans la déclaration de ton CDialog?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 05-01-2004 à 12:19:43    

ben si il l'a rajouté a la main j'imagine qu'il faut aussi bricoler la message map non ?

Reply

Marsh Posté le 05-01-2004 à 12:21:55    

chrisbk a écrit :

ben si il l'a rajouté a la main j'imagine qu'il faut aussi bricoler la message map non ?


très juste!
ajouter

Code :
  1. ON_WM_KEYUP()


Dans la messagemap...après je vois vraiment plus rien!


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 05-01-2004 à 13:54:01    

en effet ça marche nickel,  
merci à vous  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed