valeure d'1 évenement windows

valeure d'1 évenement windows - C - Programmation

Marsh Posté le 07-01-2004 à 09:11:38    

bonjour,
 
j'ai un problème existentiel. j'ai dans les mains une petite application windows, dont je souhaite modifier le comportement vis à vis de la perte de focus.
Je dois donc faire des traitements sur réception d'évènements. Le problème, c'est que je ne connais pas le nom de ces évènements. Alors du coup, je trace tous les évènements non traités que je reçois, et je me dis que c'est un de ceux-ci.
Mon problème, c'est qu'à partir de la valeur de cet évènement, j'aimerais retrouver le nom de la constante de l'API windows qui est associée.
Pour certains évènemements, c'est ok en regardant le fichier winuser.h. J'y retrouve les WM_COMMAND, et plein d'autres. Mais certains évènements que je reçois ne sont pas dedans.
Genre (en décimal): 2360910, 2426446, et d'autres.
 
Comment faire pour retouver de quoi il s'agit?
merci de votre aide. je me noie dans ce monde des applications windows...

Reply

Marsh Posté le 07-01-2004 à 09:11:38   

Reply

Marsh Posté le 07-01-2004 à 09:51:03    

heuh ??
pis la msdn alors ?
je comprends pas ta demarche la

Reply

Marsh Posté le 07-01-2004 à 11:23:23    

chrisbk a écrit :

heuh ??
je comprends pas ta demarche la


 
moi c'est pire, je comprends pas les évènemenst que je reçois. Et la MSDN, c'est bien, mais encore faut-il savoir où chercher.
J'ai une icone en systray, qui affiche un menu. Une fois le menu affiché (click droit sur l'icône), je voudrais savoir si l'utilisateur sélectionne une autre fenêtre afin de faire disparaitre ce menu. Sans quoi il restera toujours visible jusqu'à ce que l'utilisateur 'clique' sur un item.
Alors franchement, je suis pas très avancé avec ça pour chercher dans la MSDN... j'ai cherché des choses sur le focus, mais rien de très concluant.
 
la MSDN, c'est comme les pages de man: c'est bien quand on a une idée de ce que l'on cherche...

Reply

Marsh Posté le 07-01-2004 à 11:24:26    

tu veux pas faire un popup menu tout con ? [:joce]

Reply

Marsh Posté le 07-01-2004 à 11:29:57    

c'est ce qui est fait. désolé de cette imprécision.
Le fait est que ce popup-menu, il ne disparait pas tant qu'on ne clique pas sur un des items. Je voudrais modifier ce comportement.

Reply

Marsh Posté le 07-01-2004 à 11:30:55    

??  
Heuh normalement ca se fait tout seul... T'as bien utilisé les TrackPopupMenu et autre truc du genre ???

Reply

Marsh Posté le 07-01-2004 à 11:35:45    

je fais qqchose qui ressemble à ça:

Code :
  1. void displaymenu( HWND hwnd )
  2. {
  3. HMENU menu;
  4. POINT pt;
  5. menu = ::CreatePopupMenu();
  6. if(menu==NULL)
  7.  return;
  8. ::AppendMenu(menu,0,100,"change le status" );
  9. ::AppendMenu(menu,0,101,"à propos..." );
  10. ::AppendMenu(menu,0,100,"quitte" );
  11. ::GetCursorPos(&pt);
  12. ::TrackPopupMenu(menu,0,pt.x,pt.y,0,hwnd,NULL);
  13. ::DestroyMenu(menu);
  14. }

Reply

Marsh Posté le 07-01-2004 à 11:38:35    

Alors la je suis meditatif, g jamais eu aucun soucis de ce genre !

Reply

Marsh Posté le 07-01-2004 à 11:51:59    

alors on dira que je ne suis pas en veine aujourd'hui :-/

Reply

Marsh Posté le 07-01-2004 à 12:05:50    

chrisbk a écrit :

Alors la je suis meditatif, g jamais eu aucun soucis de ce genre !


 
Moi j'ai plein d'applications ( même des applis Microsoft ) qui oublient de faire disparaitre le menu popup quand je clique sur une des icones de la systray donc c'est une problematique courante :D

Reply

Marsh Posté le 07-01-2004 à 12:05:50   

Reply

Marsh Posté le 07-01-2004 à 13:20:30    

pb résolu, même si je ne comprends pas bien la subtilité.

Code :
  1. void displaymenu( HWND hwnd )
  2. {
  3. HMENU menu;
  4. POINT pt;
  5. ::SetForegroundWindow(hwnd);
  6. menu = ::CreatePopupMenu();
  7. if(menu==NULL)
  8.  return;
  9. ::AppendMenu(menu,0,100,"change le status" );
  10. ::AppendMenu(menu,0,101,"à propos..." );
  11. ::AppendMenu(menu,0,100,"quitte" );
  12. ::GetCursorPos(&pt);
  13. ::TrackPopupMenu(menu,0,pt.x,pt.y,0,hwnd,NULL);
  14. ::DestroyMenu(menu);
  15. }


 
edit: bon, la balise "g" ne fonctionne pas. Dans le code précédent, j'ai ajouté la méthode ::SetForegroundWindow(hwnd)


Message édité par SoWhatIn22 le 07-01-2004 à 13:21:56
Reply

Marsh Posté le 07-01-2004 à 13:22:50    

Ah ben ca je note, ca peut etre utile :o

Reply

Sujets relatifs:

Leave a Replay

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