Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1288 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [MFC/C++] Créer un menu+gérer les évenements du menu [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC/C++] Créer un menu+gérer les évenements du menu [résolu]

n°380136
backdafuck​up
Back to da old skool
Posté le 02-05-2003 à 09:35:10  profilanswer
 

Je travaille sous VC++ 6.
J'essaie de créer un menu (un popupmenu) accessible gràca au click droit sur le trayicon.
Voici mon code :  
 

Code :
  1. LRESULT CPremiereAppliDlg::OnTrayMessage(WPARAM wParam, LPARAM lParam)
  2. {
  3.   if (lParam == WM_RBUTTONDOWN)
  4.   {
  5. // bouton droit enfoncé
  6. CMenu  menu;
  7. CPoint pt;
  8. GetCursorPos(&pt);
  9. //création d'un menu
  10. menu.CreateMenu();
  11. menu.AppendMenu(MF_STRING,IDM_OPENDLG,"Ouvrir..." );
  12. menu.AppendMenu(MF_STRING,IDM_PARAM,"Paramètres avancés." );
  13. menu.AppendMenu(MF_SEPARATOR);
  14. menu.AppendMenu(MF_STRING,IDM_QUITTER,"Fermer l'application." );
  15. CMenu * m = menu.GetSubMenu(0);
  16. //if (!menu.LoadMenu(IDR_MENUTRAY)) //ne s'applique pas  
  17.                                             //s'il y a  
  18.                                             //création d'un  
  19.                                             //menu manuellement
  20. // return 0;
  21. CMenu* m = menu.GetSubMenu(0);
  22. if (!m) 
  23.  return 0;
  24. //MessageBox("Salut","Salut",MB_OK);
  25.     ::SetForegroundWindow(m_hWnd); //nécessaire, cause bug windows
  26.     m->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);
  27.     :: PostMessage(m_hWnd, WM_NULL, 0, 0);
  28.   }
  29. }
  30. ...


 
Ca ne marche pas. Le programme sort une erreur lorsque je fais un click droit.
Je suis débutant en C++, même en objet (on peut le dire), mais j'ai du mal à comprendre ces erreurs.
La première chose que j'avais tenté était d'appeler un menu créer grâce à Visual C++, mais il y avait une erreur à l'appel de ce menu (le programme n'associait pas l'ID du menu au menu lui même :??:).
 
Voila, si vous pouvez m'aider, c'est cool. Merci d'avance :jap:


Message édité par backdafuckup le 02-05-2003 à 11:44:42
mood
Publicité
Posté le 02-05-2003 à 09:35:10  profilanswer
 

n°380144
Konar
Posté le 02-05-2003 à 09:45:05  profilanswer
 

voila un vieux code : (c pas en mfc, mais ca devrait pas t'empecher de l'utiliser)
 

Code :
  1. // clik droit : menu
  2. HMENU hMenu = CreatePopupMenu();
  3. AppendMenu(hMenu, MF_STRING, ID__PARTAGES, (LPCTSTR)"Partages" );
  4. AppendMenu(hMenu, MF_STRING, ID__OUVRIR, (LPCTSTR)"Ouvrir" );
  5. AppendMenu(hMenu, MF_STRING, ID__RETIRER, (LPCTSTR)"Retirer" );
  6. POINT pt;
  7. GetCursorPos(&pt);
  8. UINT res = TrackPopupMenu(hMenu, TPM_RETURNCMD | TPM_LEFTBUTTON | TPM_LEFTALIGN, pt.x, pt.y, NULL, m_hWnd, NULL);
  9. DestroyMenu(hMenu);

n°380149
backdafuck​up
Back to da old skool
Posté le 02-05-2003 à 09:55:19  profilanswer
 

Konar a écrit :

voila un vieux code : (c pas en mfc, mais ca devrait pas t'empecher de l'utiliser)
 

Code :
  1. // clik droit : menu
  2. HMENU hMenu = CreatePopupMenu();
  3. AppendMenu(hMenu, MF_STRING, ID__PARTAGES, (LPCTSTR)"Partages" );
  4. AppendMenu(hMenu, MF_STRING, ID__OUVRIR, (LPCTSTR)"Ouvrir" );
  5. AppendMenu(hMenu, MF_STRING, ID__RETIRER, (LPCTSTR)"Retirer" );
  6. POINT pt;
  7. GetCursorPos(&pt);
  8. UINT res = TrackPopupMenu(hMenu, TPM_RETURNCMD | TPM_LEFTBUTTON | TPM_LEFTALIGN, pt.x, pt.y, NULL, m_hWnd, NULL);
  9. DestroyMenu(hMenu);




 
 
Merci, mais j'ai toujours le meme problème (j'ai pas d'erreurs, mais le menu ne s'affiche tout de meme pas... :/)
 
D'autres idées ?? (Up topic, Up :bounce:)

n°380159
Konar
Posté le 02-05-2003 à 10:00:38  profilanswer
 

backdafuckup a écrit :


 
 
Merci, mais j'ai toujours le meme problème (j'ai pas d'erreurs, mais le menu ne s'affiche tout de meme pas... :/)
 
D'autres idées ?? (Up topic, Up :bounce:)


 
t'es sur que le code est éxécuté ? paske bon, c'est censé marcher partout...
 
sinon teste la valeur de retour de TrackPopupMenu() ou des autres fonctions...

n°380188
backdafuck​up
Back to da old skool
Posté le 02-05-2003 à 10:21:15  profilanswer
 

Bon, j'ai trouvé, à force de modifications (et merci à Konar aussi :)).
Pour information voici le résultat :
 

Code :
  1. // bouton droit enfoncé
  2. CMenu  menu;
  3. CPoint pt;
  4. GetCursorPos(&pt);
  5. //création d'un menu
  6. menu.CreatePopupMenu();
  7. menu.AppendMenu(MF_STRING,IDM_OPENDLG,"Ouvrir..." );
  8. menu.AppendMenu(MF_STRING,IDM_PARAM,"Paramètres avancés." );
  9. menu.AppendMenu(MF_SEPARATOR);
  10. menu.AppendMenu(MF_STRING,IDM_QUITTER,"Fermer l'application." );
  11. menu.SetDefaultItem(0,TRUE);
  12. ::SetForegroundWindow(m_hWnd);
  13. UINT res = TrackPopupMenu(menu, TPM_RETURNCMD | TPM_LEFTBUTTON | TPM_LEFTALIGN, pt.x, pt.y, NULL, m_hWnd, NULL);
  14. ::SetForegroundWindow(m_hWnd); //nécessaire, cause bug windows
  15. :: PostMessage(m_hWnd, WM_NULL, 0, 0);
  16. DestroyMenu(menu);


 
Encore merci à Konar :jap:
 
Autre question : Comment gère-t-on les évenements générés par le menu ? :jap:

n°380196
backdafuck​up
Back to da old skool
Posté le 02-05-2003 à 10:24:48  profilanswer
 

Ah, oubliez ma question, j'ai trouvé...
C'était une question con, j'aurais du plus réfléchir...
 
Merci Konar (... euh... bon ok http://banguy.free.fr/smileys/bide.gif)

n°380205
backdafuck​up
Back to da old skool
Posté le 02-05-2003 à 10:32:28  profilanswer
 

Par contre, question :  
 
L'evenement Click sur une des entrées du popupmenu est il le meme que l'evenement COMMAND ???

n°380251
Konar
Posté le 02-05-2003 à 11:08:02  profilanswer
 

backdafuckup a écrit :

Par contre, question :  
 
L'evenement Click sur une des entrées du popupmenu est il le meme que l'evenement COMMAND ???


 
faut lire un peu plus les man...
 
le retour de TrackPopupMenu (ajouter le flag TPM_RETURNCMD) permet de te dire sur quoi le gars a cliqué ds le menu. Si le retour est 0, pas de selection, sinon ca retourne l'id ke t'as spécifié dans AppendMenu().

n°380267
backdafuck​up
Back to da old skool
Posté le 02-05-2003 à 11:20:30  profilanswer
 

Konar a écrit :


 
faut lire un peu plus les man...
 
le retour de TrackPopupMenu (ajouter le flag TPM_RETURNCMD) permet de te dire sur quoi le gars a cliqué ds le menu. Si le retour est 0, pas de selection, sinon ca retourne l'id ke t'as spécifié dans AppendMenu().


 
Je te remercie, j'avais pas vu que tu avais répondu, mais j'ai trouvé depuis un moment en fait... J'ai pas assez réflechi.
Je te remercie pour le temps accordé :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [MFC/C++] Créer un menu+gérer les évenements du menu [résolu]

 

Sujets relatifs
menu Batch DOS[ Python ] problème libftp [ resolu ]
[VB6] Gérer les erreurs globalementFileDialog sans MFC
Créer un plugin..gérer les différents boutons de la souris
Comment avoir l'interface de WinXP avec une application VB6[résolu]Sous Visual C++ 6.0, créer un bouton Parcourir (fichier)
comment creer une page index htm qui fasse apparaitre une liste[JS] Faire un menu défilant avec des divs... (Etape 2...)
Plus de sujets relatifs à : [MFC/C++] Créer un menu+gérer les évenements du menu [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR