Pb avec menu d'un systray

Résolu
cs_myckie Messages postés 50 Date d'inscription vendredi 19 mai 2006 Statut Membre Dernière intervention 2 juillet 2016 - 15 nov. 2007 à 20:37
cs_myckie Messages postés 50 Date d'inscription vendredi 19 mai 2006 Statut Membre Dernière intervention 2 juillet 2016 - 16 nov. 2007 à 15:22
bonjour j'ai coder un bouton sur mon programme afin qu'il mette une icone dans la barre de tray ( a coté de l'heure) a cette icone j'y ai ajouter un menu déroulant le problème est que lorsque je clique sur un des items du menu je n'execute pas le code correspondant (en mode debug aucun passage dans l'evenement command correspondant a l'item ) voila le code que j'ai mi :

hWnd=::FindWindow(NULL,

"Test");
TrayIcon.cbSize =
sizeof(NOTIFYICONDATA);
TrayIcon.hWnd = hWnd;
TrayIcon.uID = id;
TrayIcon.uFlags = NIF_MESSAGE| NIF_ICON | NIF_TIP;
TrayIcon.uCallbackMessage = WM_TRAY_MESSAGE;
TrayIcon.hIcon =LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE (IDR_MAINFRAME));

Shell_NotifyIcon(NIM_ADD, &TrayIcon);

// ShowWindow(SW_HIDE);   ce bout de code fonctionne bien vu que l'icone se met bien dans la barre de tray, puis j'ai une fonction qui intercepte le message venant de l'icone dans le systay :

LONG CLecteurDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)

{

POINT pt;

switch (lParam)


   case WM_LBUTTONDOWN:
   AfxMessageBox(
"Test OK");

   break;

   case WM_RBUTTONDOWN:

   case WM_CONTEXTMENU:
      GetCursorPos(&pt);
      CMenu myMenu;
      myMenu.LoadMenu(IDR_MENU2);
      ::SetForegroundWindow(hWnd);
      myMenu.GetSubMenu(0)->TrackPopupMenu(TPM_RETURNCMD |TPM_RIGHTBUTTON,pt.x, pt.y,
this);

      //DestroyMenu(myMenu);
      break;   }

      return 1; }

sa sa fonctionne egalement car le menu s'affiche si je clique droit sur l'icone, je précise aussi que j'ai déjas un menu de créer pour ma fenetre d'application et un autre pour l'icone tray c'est pour cela que j'ai mi (IDR_MENU2)

donc voila j'ai créer la fonction correspondant au item du menu de l'icone  tray mais je n'y accede pas

donc si quelqu'un peut m'aider sa serai gentil

merci d'avance

1 réponse

cs_myckie Messages postés 50 Date d'inscription vendredi 19 mai 2006 Statut Membre Dernière intervention 2 juillet 2016
16 nov. 2007 à 15:22
Bon j'ai mi le temp mais j'ai trouver en fait il fallait que je récupère ID de l'item clické et que je face des switch en conséquence voilà un exemple de code pour ceux qui comme moi on eu se problème :
(se code est a mettre dans la gestion des message venant de l'icone dans le systray)

case

WM_CONTEXTMENU:
GetCursorPos(&pt);

CMenu myMenu;

myMenu.LoadMenu(IDR_MENU2);

::SetForegroundWindow(hWnd);

selection=myMenu.GetSubMenu(0)->TrackPopupMenu(TPM_RETURNCMD |TPM_RIGHTBUTTON,

pt.x, pt.y,

this); // Sélection est de type DWORD a déclarer en début d'instruction

switch (selection){

case ID_MENU_AGRANDISSEMENT32783: //Chaque ID correspondent aux ID définit lors de la création du menu{

OnMenuAgrandissement32783();

break;}

case ID_MENU_OUVRIR2:{

OnFichierOuvrir();

break;}

case ID_MENU_PARCOURIR2:{

OnFichierParcourir();

break;}

voilà en espérant que sa sera utile aux personne qui on le meme probleme que j'ai eu
3
Rejoignez-nous