Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 58 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Gestion de Message (PostMessage,....)

 
n°19202
wam
En route vers le 8ème!!
Profil : Vieux de la vieille
Posté le 06-03-2008 à 12:54:09  profilanswer
 

Salut à tous,
 
J'essaye de réaliser une petite appli console qui gère un message personnalisé :
Le problème est que mon appli n'intercepte pas du tout le message que je génère avec PostMessage.
Je suis débutant en C++, donc soyez indulgeants :ange:  
Si quelqu'un d'aimable pouvez me guider un peu ça serait cool :p
 
Voici mon code :
 
Que de la merde la balise code :o  
[size=1]
[/size][size=1]
 

Code :
  1. [/size]// EssaiMessage.cpp : définit le point d'entrée pour l'application console.
  2. //#include "stdafx.h"
  3. #include "EssaiMessage.h"
  4. #ifdef _DEBUG
  5. #define new DEBUG_NEW
  6. #endif
  7. // Seul et unique objet application
  8. #define WM_TEST WM_USER + 1
  9. CWinApp theApp;
  10. class CBrPvi:CWnd
  11. {
  12. protected:
  13.   LRESULT OnPviEvent (WPARAM, LPARAM);
  14.   DECLARE_MESSAGE_MAP()
  15. };
  16. BEGIN_MESSAGE_MAP(CBrPvi, CWnd)
  17. //{{AFX_MSG_MAP(CSdisamplesView)
  18. //}}AFX_MSG_MAP
  19. // Standard printing commands
  20. ON_MESSAGE(WM_TEST, OnPviEvent)  // message privé  
  21. END_MESSAGE_MAP()
  22. using namespace std;
  23. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  24. {
  25. int nRetCode = 0;
  26. // Initialise MFC et affiche un message d'erreur en cas d'échec
  27. if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  28. {
  29.   // TODO : modifiez le code d'erreur selon les besoins
  30.   _tprintf(_T("Erreur irrécupérable : l'initialisation MFC a échouén" ));
  31.   nRetCode = 1;
  32. }
  33. else
  34. {
  35.   // TODO : codez le comportement de l'application à cet emplacement.
  36.   if (PostMessage(NULL, WM_TEST, 0, 0) == 0)
  37.   {
  38.    MessageBoxA(NULL,"Erreur PostMEssage", "", MB_OK);
  39.   }
  40. }
  41. return nRetCode;
  42. }
  43. long CBrPvi::OnPviEvent(WPARAM wparam, LPARAM lparam)
  44. {
  45. MessageBoxA(NULL,"OnPviEvent", "", MB_OK);
  46. return 0L;
  47. }


Message édité par wam le 06-03-2008 à 12:57:22

---------------
j'adoooooooore!
n°19203
cmoila
Profil : Membre
Posté le 06-03-2008 à 13:49:17  profilanswer
 

Ton prog se termine avant que le message arrive. Tu as 2 fonctions pour envoyer un message. PostMessage() qui met le message dans la queue et retourne immédiatement. Et SendMessage() qui attend que le message soit traité avant de retourner.
Donc soit tu mets quelques chose a faire dans le prog après l'envoie du message par Post, soit tu mets Send.
 
 
Doc win32 :
 
The SendMessage function sends the specified message to a window or windows. The function calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function, in contrast, posts a message to a thread's message queue and returns immediately.  
 
LRESULT SendMessage(
 
    HWND hWnd, // handle of destination window
    UINT Msg, // message to send
    WPARAM wParam, // first message parameter
    LPARAM lParam  // second message parameter
   );
 
 
 
The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and then returns without waiting for the thread to process the message. Messages in a message queue are retrieved by calls to the GetMessage or PeekMessage function.  
 
BOOL PostMessage(
 
    HWND hWnd, // handle of destination window
    UINT Msg, // message to post  
    WPARAM wParam, // first message parameter
    LPARAM lParam  // second message parameter
   );

n°19204
cmoila
Profil : Membre
Posté le 06-03-2008 à 13:52:47  profilanswer
 

J'ajoute que dans la pratique de la prog événementielle, c'est PostMessage que l'on utilise, c'est le principe de ce type de programmation. SendMessage c'est de la prog sequentielle classique.

n°19205
wam
En route vers le 8ème!!
Profil : Vieux de la vieille
Posté le 06-03-2008 à 13:58:18  profilanswer
 

Merci pour tes conseilles.
Par contre lorsque j'utilise SendMessage, la fonction me retourne une erreur :/
 
SendMessage(NULL,WM_TEST, 0, 0)


---------------
j'adoooooooore!
n°19206
cmoila
Profil : Membre
Posté le 06-03-2008 à 14:13:43  profilanswer
 

Quelle erreur ? que tu vois comment ?

n°19207
wam
En route vers le 8ème!!
Profil : Vieux de la vieille
Posté le 06-03-2008 à 14:26:11  profilanswer
 

Je teste le retour de SendMessage
Ne suis je pas obligé de lui passer le premier paramètre !=NULL (hWND) à la fonction SendMessage?


Message édité par wam le 06-03-2008 à 14:27:44

---------------
j'adoooooooore!
n°19208
cmoila
Profil : Membre
Posté le 06-03-2008 à 14:32:19  profilanswer
 

Regarde la ligne 48 de ton prog.


Aller à :
Ajouter une réponse