[VC++] Gestion des messages

Gestion des messages [VC++] - C++ - Programmation

Marsh Posté le 22-07-2002 à 16:37:43    

Je suis dans ma boucle for et j'aimerai que mon programme s'arrete jusqu'a ce que je recoive un message particulier.
Comment je peux faire?


Message édité par try58 le 22-07-2002 à 16:39:26

---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 22-07-2002 à 16:37:43   

Reply

Marsh Posté le 22-07-2002 à 16:39:51    

tu peux utiliser un timer toutes les millisecondes, pour intercepter le message. implémente ce timer dans un thread de préférence


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 22-07-2002 à 16:41:28    

Harkonnen a écrit a écrit :

tu peux utiliser un timer toutes les millisecondes, pour intercepter le message. implémente ce timer dans un thread de préférence




C'est quoi la fonction pour intercepter un message?


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 22-07-2002 à 17:00:37    

:bounce:


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 22-07-2002 à 17:06:59    

GetMessage, que tu dois ensuite translater via TranslateMessage. j'ai pas les paramètres en tete, cf MSDN


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 22-07-2002 à 17:13:02    

Harkonnen a écrit a écrit :

GetMessage, que tu dois ensuite translater via TranslateMessage. j'ai pas les paramètres en tete, cf MSDN




Saurais tu comment affecter une fonction a un message perso?


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 22-07-2002 à 17:18:48    

Ca revient à appeler des fonctions en fonction d'évènements, et donc à créer des fonctions Callback.
 
Le mieux dans ton cas est de passer par un switch...case : dans ta fonction de Timer, une fois que tu as intercepté et décodé les messages, tu peux procéder comme suit :
 

Code :
  1. switch (msg) {
  2.    case WM_MACHIN:
  3.       // appeler la fonction souhaitée
  4.       break;
  5.    case WM_TRUC:
  6.       // appeler la fonction souhaitée
  7.       break;
  8. }


 
etc...


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 22-07-2002 à 17:21:27    

ok je vais essayer, merci!


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 23-07-2002 à 11:33:59    

J'ai un petit probleme de boucle infinie. Voici mon code :
Dans le prog principal:

Code :
  1. #define WM_MYMESSAGE WM_USER+3
  2. GetMessage(&Msg, m_hWnd, 0, 0);
  3. while (Msg.message != WM_MYMESSAGE)
  4. {
  5. GetMessage(&Msg, m_hWnd, 0, 0);
  6. AfxMessageBox("titi" );
  7. }
  8. AfxMessageBox("toto" );


Dans ma fonction de callback:

Code :
  1. //_MyData->hW correspond a mon pointeur sur ma Dialogue
  2. _MyData->hW->PostMessage(WM_MYMESSAGE, 0, 0);


A aucun moment "toto" apparait


Message édité par try58 le 23-07-2002 à 11:34:26

---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 23-07-2002 à 11:38:11    

T'as oublié le TranslateMessage()


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-07-2002 à 11:38:11   

Reply

Marsh Posté le 23-07-2002 à 11:42:27    

voir ici pour plus d'infos sur les messages :
 
http://msdn.microsoft.com/library/ [...] queues.asp


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-07-2002 à 11:44:00    

A quel niveau? parce que moi je l'ai mis juste apres le GetMessage mais ca ne marche toujours pas!!


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 23-07-2002 à 11:46:23    

Faut faire un TranslateMessage et un DispatchMessage ensuite. Regarde le lien que je t'ai filé, tout est expliqué en intégralité


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-07-2002 à 12:02:54    

Arf!! J'ai fait exactement comme dans l'exemple mais ca ne marche toujours pas.

Code :
  1. while (GetMessage(&Msg, NULL, 0, 0))
  2. {
  3. TranslateMessage(&Msg);
  4. DispatchMessage(&Msg);
  5. if (Msg.message == WM_MYMESSAGE)
  6.  break;
  7. AfxMessageBox("titi" );
  8. }
  9. AfxMessageBox("toto" );



---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 23-07-2002 à 12:11:59    

heu si en fait ca marche. J'ai enleve le AfxMessageBox("titi" ) par ce que celui ci creer un message et donc relancait la boucle.
Je te remercie de ton aide Harkonnen


Message édité par try58 le 23-07-2002 à 12:12:15

---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 23-07-2002 à 12:15:44    

:hello:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-07-2002 à 12:16:47    

il est fort lui :jap: avec son pseudo de biere :D


---------------
Super.
Reply

Marsh Posté le 23-07-2002 à 12:24:05    

Godbout a écrit a écrit :

il est fort lui :jap: avec son pseudo de biere :D




[:swiip]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-07-2002 à 11:32:47    

http://forum.hardware.fr/icones/icon14.gif


---------------
Allez l'OM :jap:
Reply

Marsh Posté le 24-07-2002 à 11:33:00    

:D


---------------
Super.
Reply

Sujets relatifs:

Leave a Replay

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