[C/C++][Win32] PreTranslateMessage sans MFC: detect key press

PreTranslateMessage sans MFC: detect key press [C/C++][Win32] - C++ - Programmation

Marsh Posté le 23-02-2003 à 18:53:30    

Salut,
Comment faire pour intercepter un message avant que celui-ci soit "envoyé" dans la boucle des messages, en gros je voudrais savoir si l'on peut utiliser une fonction du genre PreTranslateMessage des MFC...
merci
   ANT


Message édité par antsite le 24-02-2003 à 11:40:15
Reply

Marsh Posté le 23-02-2003 à 18:53:30   

Reply

Marsh Posté le 24-02-2003 à 10:28:40    

:bounce:

Reply

Marsh Posté le 24-02-2003 à 11:09:55    

Ben tu appelle juste ta fonction "PreTranslateMessage" dans ta boucle de "traîtement" des messages.
Un truc comme par exemple :

Code :
  1. while( ::GetMessage( &msg, NULL, 0, 0 ) )
  2. {
  3. if( PreTranslateMessage( &msg ) )
  4. {
  5. ::TranslateMessage( &msg );
  6. ::DispatchMessage( &msg );
  7. }
  8. }


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-02-2003 à 11:20:12    

Moi j'ai un WinMain et je n'utilise pas les MFC donc à priori MSDN à l'appui je ne vois pas comment utiliser la fonction PreTranslateMessage membre de la classe CWnd /CWinThread / CWinApp, mais bon je peux me tromper ! Help!
 
En fait le but est le suivant:
Je veux faire éxécuter qqch à mon prog quand on appui sur F3 par exemple. Seulement voila quand c'est mon edit ou ma liste qui a le controle et bien le message WM_KEYDOWN n'est pas envoyé à mon app...
La solution de bricolage serait dans chaque controle de détecter si F3 et après de procédé à l'appel de la fonction, mais bon...
Donc existe-t-il un moyen de regarder si on a appuyer sur une touche mais peu importe quel controle a le focus... ?


Message édité par antsite le 24-02-2003 à 11:43:16
Reply

Marsh Posté le 24-02-2003 à 15:11:10    

ANTSite a écrit :

Moi j'ai un WinMain...


Donc si tu as un WinMain, tu as bien quelque part un truc du genre :

Code :
  1. while( ::GetMessage( &msg, NULL, 0, 0 ) ) 
  2. {
  3. ::TranslateMessage( &msg );
  4. ::DispatchMessage( &msg );
  5. }


 
Et donc, avant de faire le TranslateMessage et le DispatchMessage, tu fais un appel à ta fonction PreTranslateMessage que tu codes tout seul. Tu peux bien évidemment l'appeler MaFonctionQuiTraiteLesMessagesAvantWindows ou ce que tu veux d'autre. La fonction que j'ai appelée PreTranslateMessage dans le code du message précedent est une fonction que tu codes comme tu veux (ce n'est pas celle des MFCs).
 
Par exemple :  

Code :
  1. BOOL PreTranslateMessage( MSG *pMsg )
  2. {
  3. if( (msg.hwnd == gEditHwnd) && (msg.message == WM_KEYDOWN) && (((int)msg.wParam) == VK_F3) )
  4. {
  5. return FALSE;
  6. }
  7. else
  8. {
  9. return TRUE;
  10. }
  11. }


 
C'est plus clair, maintenant ?


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-02-2003 à 16:11:28    

Ouh la oui je me suis complètement planté, j'avais pas compris, pardon et merci beaucoup pour cet éclaircissement!
 :hello:  
 
P.S. : Je me présenterais bien comme boolay officiel de Gatorette moi!

Reply

Marsh Posté le 24-02-2003 à 16:18:43    

Je pense à un truc : tu peux peut être essayer cette méthode pour capturer l'appui sur la touche Entrée. Cela résoudrait peut être ton autre problème.
Malgré tout, c'est quand même une méthode pas très "propre" (mais bon, si ça marche...).


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-02-2003 à 19:01:05    

Citation :

Donc existe-t-il un moyen de regarder si on a appuyer sur une touche mais peu importe quel controle a le focus... ?

 
oui, les Accelerator ... C'est + simple, + propre, et fait exprès !
http://www.schaudin.via.t-online.d [...] lation.htm


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-02-2003 à 19:12:36    

J'avais complètement oublié cette solution que j'ai déjà utilisée, en effet c'est l'idéal et ça marche nickel
 :hello:

Reply

Sujets relatifs:

Leave a Replay

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