Systray

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 25 janv. 2004 à 12:14
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 4 févr. 2004 à 18:55
Bonjour a tous,
je sais qu'il existe des sources pour ajouter son application dans la systray, mais j'ai beau essayer de comprendre, je n'y arrive pas :sad) ... Alors je demande de l'aide...
En fait je voudrais ajouter mon application (boite de dialogue) dans la systray, et que l'on ne la voit pas dans la taskbar (je sais pas si c'est comme ca qu'elle s'appelle, enfin la barre à côté du bouton du menu demarrer)...
Voila aidez moi s'il vou plait...
Merci par avance...
Bob...

"La chance accorde ses faveur aux esprits avertis..."

12 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 janv. 2004 à 12:33
En fait ce qu'on fait, c'est qu'on ajoute une icone dans la barre des taches, et puis tu caches ta fenête avec ShowWindow, mais il me semble qu'il y a plusieurs sources qui traitent de ca
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
25 janv. 2004 à 14:52
certes mais j'arrive pas a comprendre ou a adapté le code a mon programme... c'est pour ca que j'aimerais que l'on m'explique...
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
25 janv. 2004 à 18:21
regarde, j'ai ecrit ce code et j'ai 6 erreurs tu pourrais pas m'aider???

[Code]#include <windows.h>
#include "resource.h"

#define WM_TRAY_ICONE (WM_USER+1)

HINSTANCE hInst;
BOOL AffichageMenu = FALSE;

BOOL AddIcone(HINSTANCE hInst, HWND hWnd, UINT id, LPTSTR IconName, char *infobulle)
{
BOOL res;

NOTIFYICONDATA trid;

trid.cbSize = sizeof(NOTIFYICONDATA);
trid.hWnd = hWnd;
trid.uID = id;
trid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
trid.uCallbackMessage = WM_TRAY_ICONE;
trid.hIcon = LoadIcon(hInst, IconName);

if(infobulle)
{
lstrcpyn(trid.szTip, infobulle, sizeof(trid.szTip));
}
else
{
trid.szTip[0] = '\0';

res = Shell_NotifyIcon(NIM_ADD, &trid);

return res;
}

BOOL RetIcone(HWND hwnd, UINT id)
{
BOOL res;

NOTIFYICONDATA trid;
trid.cbSize = sizeof(NOTIFYICONDATA);
trid.hWnd = hWnd;
trid.uID = id;

res = Shell_NotifyIcon(NIM_DELETE, &trid);

return res;
}

LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
AddIcone(hInst, hwnd, 2, MAKEINTRESOURCE(IDI_ICON), "Util MSN");

case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDCANCEL:
{
RetIcone(hwnd, 2);
EndDialog(hWnd, FALSE);
return TRUE;
}

case ID_TRAY_ITEM_1:
{
MessageBox(hWnd, "Util MSN par Jérémy Decool", "Information", MB_OK | MB_ICONINFORMATION);
}

case ID_TRAY_ITEM_2:
{
SendMessage(hWnd, WM_COMMAND, IDCANCEL, NULL);
}
}

case WM_TRAY_ICONE:
{
if(AffichageMenu || (lParam != WM_RBUTTONUP && lParam != WM_LBUTTONDBLCLK))
return FALSE;

HMENU menu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENUTRAY));

if(!menu)
{
return FALSE;
}

HMENU submenu = GetSubMenu(menu, 0);

if(!submenu)
{
return FALSE;
}

if(lParam == WM_RBUTTONUP)
{
AffichageMenu = TRUE;
POINT mouse;
GetCursorPos(&mouse);
SetMenuDefaultItem(submenu, ID_TRAY_ITEM_1, FALSE);
SetForegroundWindow(hWnd);
TrackPopupMenu(submenu, TPM_RETURNCMD || TPM_RIGHTALIGN, mouse.x, mouse.y, 0, hWnd, NULL);
DestroyMenu(subMenu);
DestroyMenu(menu);

return TRUE;
}
else
{
SendMessage(hWnd, WM_COMMAND, ID_TRAY_ITEM_1, NULL);

return TRUE;
}
}

default:
return FALSE;
}

return TRUE;
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hInst = hInstance;

DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC)DlgProc);

return 0;
}

voila j'ai trois erreurs avec les handle, une erreur avec la fonction WinMain (def de fonctions locales non conforme) et 'submenu' non déclarer...

voila j'espere que quelqu'un pourrat m'aider...
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 janv. 2004 à 17:17
def de fonction locale: tu as oublié un }
pb de handle: tu as écrit hwnd au lieu de hWnd
submenu: tu as écrit subMenu au lieu de submenu

bref, des erreurs à la con, mais sinon t'as d'autres erreurs je crois, par exemple tu oublie des break après des case
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
26 janv. 2004 à 19:09
bon je viens de réparer mes diverses erreurs, désoler de t'avoir déranger avec ca... mais je comprend pas ma faute dans la def de fonction, je ne comprend pas ma faute :blush) ... pourrais-tu m'aider svp???
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 janv. 2004 à 20:27
C'est parce que tu as oublié un } comme je te l'ai dit. Par exemple ca peut etre un truc de ce genre

int f()
{
return 0;

void g()
{
}

le compilo croit que tu veux définir g dans f
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
26 janv. 2004 à 21:46
oui ca je le sais, seulement je ne vois pas à qu'elle fonction il manque l'}'... tu peux m'aider stp...
merci par avance...
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
RTW Messages postés 36 Date d'inscription mercredi 31 décembre 2003 Statut Membre Dernière intervention 1 février 2004
26 janv. 2004 à 22:56
Regarde ta première fonction :
BOOL AddIcone(HINSTANCE hInst, HWND hWnd, UINT id, LPTSTR IconName, char *infobulle)
{
BOOL res;

NOTIFYICONDATA trid;

trid.cbSize = sizeof(NOTIFYICONDATA);
trid.hWnd = hWnd;
trid.uID = id;
trid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
trid.uCallbackMessage = WM_TRAY_ICONE;
trid.hIcon = LoadIcon(hInst, IconName);

if(infobulle)
{
lstrcpyn(trid.szTip, infobulle, sizeof(trid.szTip));
}
else
{
trid.szTip[0] = '\0';

res = Shell_NotifyIcon(NIM_ADD, &trid);

return res;
}


Ta boucle if...else ne se termine pas convenablement.
Ecrit plutôt ça :
if ( infobulle )
     lstrcpyn(trid.szTip, infobulle, sizeof(trid.szTip));
else
     trid.szTip[0] = '\0';


Et ça devrait aller mieux.

RTW, pour que l'entraide dure...
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
27 janv. 2004 à 13:20
voici mon code:
#include <windows.h>
#include "resource.h"

#define WM_TRAY_ICONE (WM_USER+1)

HINSTANCE hInst;
BOOL AffichageMenu = FALSE;

BOOL AddIcone(HINSTANCE hInst, HWND hWnd, UINT id, LPTSTR IconName, char *infobulle)
{
BOOL res;

NOTIFYICONDATA trid;

trid.cbSize = sizeof(NOTIFYICONDATA);
trid.hWnd = hWnd;
trid.uID = id;
trid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
trid.uCallbackMessage = WM_TRAY_ICONE;
trid.hIcon = LoadIcon(hInst, IconName);

if (infobulle)
lstrcpyn(trid.szTip, infobulle, sizeof(trid.szTip));
else
trid.szTip[0] = '\0';

res = Shell_NotifyIcon(NIM_ADD, &trid);

return res;
}

BOOL RetIcone(HWND hWnd, UINT id)
{
BOOL res;

NOTIFYICONDATA trid;
trid.cbSize = sizeof(NOTIFYICONDATA);
trid.hWnd = hWnd;
trid.uID = id;

res = Shell_NotifyIcon(NIM_DELETE, &trid);

return res;
}

LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
AddIcone(hInst, hWnd, 2, MAKEINTRESOURCE(IDI_ICON), "Util MSN");

case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDCANCEL:
{
RetIcone(hWnd, 2);
EndDialog(hWnd, FALSE);

return TRUE;
}

case ID_TRAY_ITEM_1:
{
MessageBox(hWnd, "Util MSN par Jérémy Decool", "Information", MB_OK | MB_ICONINFORMATION);
}

case ID_TRAY_ITEM_2:
{
SendMessage(hWnd, WM_COMMAND, IDCANCEL, NULL);
}
}

case WM_TRAY_ICONE:
{
if(AffichageMenu || (lParam != WM_RBUTTONUP && lParam != WM_LBUTTONDBLCLK))
return FALSE;

HMENU menu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENUTRAY));

if(!menu)
return FALSE;

HMENU submenu = GetSubMenu(menu, 0);

if(!submenu)
return FALSE;

if(lParam == WM_RBUTTONUP)
{
AffichageMenu = TRUE;
POINT mouse;
GetCursorPos(&mouse);
SetMenuDefaultItem(submenu, ID_TRAY_ITEM_1, FALSE);
SetForegroundWindow(hWnd);
TrackPopupMenu(submenu, TPM_RETURNCMD || TPM_RIGHTALIGN, mouse.x, mouse.y, 0, hWnd, NULL);
DestroyMenu(submenu);
DestroyMenu(menu);

return TRUE;
}
else
{
SendMessage(hWnd, WM_COMMAND, ID_TRAY_ITEM_1, NULL);

return TRUE;
}
}

default:
return FALSE;
}

return TRUE;
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hInst = hInstance;

DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC)DlgProc);

return 0;
}


mais j'ai toujours les deux erreurs...
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
RTW Messages postés 36 Date d'inscription mercredi 31 décembre 2003 Statut Membre Dernière intervention 1 février 2004
27 janv. 2004 à 16:35
En effet, tu as oublié un "}", tu as écris hwnd au lieu de hWnd, et je sais plus quoi...

Je pense qu'avec ça, ça devrait aller mieux :
#include <windows.h>
#include "resource.h"

#define WM_TRAY_ICONE (WM_USER+1)

HINSTANCE hInst;
BOOL AffichageMenu = FALSE;

BOOL AddIcone(HINSTANCE hInst, HWND hWnd, UINT id, LPTSTR IconName, char *infobulle)
{
     BOOL res;

     NOTIFYICONDATA trid;

     trid.cbSize = sizeof(NOTIFYICONDATA);
     trid.hWnd = hWnd;
     trid.uID = id;
     trid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
     trid.uCallbackMessage = WM_TRAY_ICONE;
     trid.hIcon = LoadIcon(hInst, IconName);

     if (infobulle)
          lstrcpyn(trid.szTip, infobulle, sizeof(trid.szTip));
     else
          trid.szTip[0] = '\0';

     res = Shell_NotifyIcon(NIM_ADD, &trid);

     return res;
}

BOOL RetIcone(HWND hWnd, UINT id)
{
     BOOL res;

     NOTIFYICONDATA trid;
     trid.cbSize = sizeof(NOTIFYICONDATA);
     trid.hWnd = hWnd;
     trid.uID = id;

     res = Shell_NotifyIcon(NIM_DELETE, &trid);

     return res;
}

LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
     switch(msg)
     {
          case WM_INITDIALOG:
               AddIcone(hInst, hWnd, 2, MAKEINTRESOURCE(IDI_ICON), "Util MSN");
               break;

          case WM_COMMAND:
          {
               switch(LOWORD(wParam))
               {
                    case IDCANCEL:
                    {
                         RetIcone(hWnd, 2);
                         EndDialog(hWnd, FALSE);
                         return TRUE;
                    }

                    case ID_TRAY_ITEM_1:
                    {
                         MessageBox(hWnd, "Util MSN par Jérémy Decool", "Information", MB_OK | MB_ICONINFORMATION);
                    }

                    case ID_TRAY_ITEM_2:
                    {
                         SendMessage(hWnd, WM_COMMAND, IDCANCEL, 0);
                    }
               }
          }

               case WM_TRAY_ICONE:
               {
                    if(AffichageMenu || (lParam != WM_RBUTTONUP && lParam != WM_LBUTTONDBLCLK))
                         return FALSE;

                    HMENU menu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENUTRAY));

                    if(!menu)
                         return FALSE;

                    HMENU submenu = GetSubMenu(menu, 0);

                    if(!submenu)
                         return FALSE;

                    if(lParam == WM_RBUTTONUP)
                    {
                         AffichageMenu = TRUE;
                         POINT mouse;
                         GetCursorPos(&mouse);
                         SetMenuDefaultItem(submenu, ID_TRAY_ITEM_1, FALSE);
                         SetForegroundWindow(hWnd);
                         TrackPopupMenu(submenu, TPM_RETURNCMD || TPM_RIGHTALIGN, mouse.x, mouse.y, 0, hWnd, NULL);
                         DestroyMenu(submenu);
                         DestroyMenu(menu);

                         return TRUE;
                    }
                    else
                    {
                         SendMessage(hWnd, WM_COMMAND, ID_TRAY_ITEM_1, 0);

                         return TRUE;
                    }
               }

               default:
                    return FALSE;
          }

     return TRUE;
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hInst = hInstance;

DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC)DlgProc);

return 0;
}


Une petite remarque, personnellement, je préfère :
case WM_TRUC:
// Mon code
break;

à :
case WM_TRUC:
{
// Ton code
}

M'enfin, rien d'important !

RTW, pour que l'entraide dure...
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
27 janv. 2004 à 19:04
ok je te remerci maintenant ca marche, je vais maintenant comparer les deux codes pour voir ou sont mes erreurs... je te remercie beaucoup pour ton aide tres precieuse...
MERCI
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
4 févr. 2004 à 18:55
salut, j'ai encore un probleme avec l'icone dans la systray... en fait le truc c'est que je peux accéder au menu qu'une seul fois... comment ca se fait et comment puis-je faire pour réparé cette erreur?
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
Rejoignez-nous