Systray

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 25 juil. 2004 à 20:57
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 26 juil. 2004 à 13:56
bonjour a tous.
apres avoir arpenté les sources, j'ai trouvé pas mal de sources pour mettre un prog ds la systray, mais jai pas mal de mal a capter comment ca fonctionne. je debute en prog windows, je suis juste etudiant en info, dc cest prog unix a fond, et surtt etude de lalgo et des fonctrions de bases du c++, et je me sentains de me mettre aux api ds mon coin, mais la la systray...je men sors pas avec touts ces sources, si qqun pouvait me donner qqs explications sur les objets qu'on utilise, les fonctions, les identifieurs, etc.....ca serait sympa.
merci d'avance

10 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 juil. 2004 à 21:14
Tu as regarde Shell_NotifyIcon() dans MSDN ?
Faut commencer par la, ensuite tu demandes ce qui te semble obscur, ok ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 juil. 2004 à 21:22
bon alors pr ce squi me semble obscur....on ma passé ce bout de code.

/*~~~~~~~~~~~~~~~~~*/
NOTIFYICONDATA tnid;
/*~~~~~~~~~~~~~~~~~*/

tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = this->Handle;
tnid.uID = ICON_ID; /* personal ID */
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = WM_ICON_MSG;
tnid.hIcon = Icon->Handle;
AnsiString s_tmpappname = "EVATIS-B\0" ;
memcpy(tnid.szTip,s_tmpappname.c_str()
,s_tmpappname.Length());
tnid.szTip[s_tmpappname.Length()] = '\0';
CanClose = false;
Shell_NotifyIcon(NIM_ADD, &tnid);

et pour la rouvrir en cas de click, yu intercepte le message utilise dans uCallbackMessage:

case WM_ICON_MSG:
switch(Message.WParam)
{
case ICON_ID:
if(Message.LParam != WM_LBUTTONDBLCLK) break;

/*~~~~~~~~~~~~~~~~~*/
NOTIFYICONDATA tnid;
/*~~~~~~~~~~~~~~~~~*/

tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = this->Handle;
tnid.uID = ICON_ID; /* personal ID */
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = WM_ICON_MSG;
tnid.hIcon = Icon->Handle;
Shell_NotifyIcon(NIM_DELETE, &tnid);
Show();
ShowWindow(Handle, SW_SHOWMAXIMIZED);
SetForegroundWindow(Handle);
}

tnid cest quel type d'objet, ca contient quoi? c'est des NOTIFYICONDATA je suppose (enfin pas je suppose, cest clair lol), mais cest quoi exactement?ensuite les Handle, qqun peut m'expliquer un peu? et les flags? jai pas mal dautres bouts de codes avec des trucs obscur, mais la deja ca sera pas mal, ca me permettra surement d'avoir un bon point de depart.
merci d'avance, et merci a toi d'avoir deja repondu
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 juil. 2004 à 21:37
Bon si ça te derange pas, on va reprendre avec du simple, si on commence a melanger du stl et autres machins, on a pas fini.

NOTIFYICONDATA TrayIcon;
HICON icons[2];

LRESULT CALLBACK WindowProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam) {
switch(mssg) {
case WM_CREATE:
TrayIcon.cbSize = sizeof(NOTIFYICONDATA);
*((DWORD*) szmaxi) = 0x4E4F4E; // "NON"
TrayIcon.hWnd = hwnd;
TrayIcon.uID = 0;
TrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
TrayIcon.uCallbackMessage = WM_MOUSEMOVE;
TrayIcon.hIcon = icons[1];
strcpy(TrayIcon.szTip, szmaxi);
Shell_NotifyIcon(NIM_ADD, &TrayIcon);
........

va mieux ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 juil. 2004 à 21:43
vi cest deja plus comprehensible, merci. quelques questions quand meme. ya quoi dans un NOTIFYICONDATA? ensuite ds la ligen suivante :
*((DWORD*) szmaxi) = 0x4E4F4E; // "NON"
cest koi un DWORD? et pk je met ce pointeur sur cette adresse?
enfin, quand jappelle la fonction, je lui donne quoi a bouffer?
merci
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 juil. 2004 à 21:55
NOTIFYICONDATA est une structure qu'on doit remplir et passer son adresse a la fonction API. goto MDNS pour details.

char szmaxi[4];
j'ai place "NON" dedans, ce sera le tooltip affiche quand on ballade la souris sur icone dans le systray.

ciao...
BruNews, Admin CS, MVP Visual C++
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 juil. 2004 à 21:59
merci beaucoup. ca m'eclaire pas mal
et la fonction, je lui donne quoi a bouffer a lappel? je lappelle ds mpon winmain (ou dans une fonction appelée par mon winmain), et je lui donne quoi dans les parametres?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 juil. 2004 à 22:06
Oh j'ai pourtant mis ce qu'il faut, regarde au dessu c'est un winproc, il faut lui donner un HWND comme fenetre a notifier donc ne peut pas etre au debut dans WinMain.

ciao...
BruNews, Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 juil. 2004 à 22:07
Va prendre le tout, c'est dans ma source 'Limit IE...' ou un nom de ce genre, fichier LimitIE.cpp.

ciao...
BruNews, Admin CS, MVP Visual C++
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 juil. 2004 à 22:11
merci je vais aller voir la source, si jai des pb je reposterais. merci beaucoup.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
26 juil. 2004 à 13:56
bon je suis allé voir ta source, juste un petite question. la windowproc tu lappelle jamais, alors juste pour confirmation, cest une fonction qui gere ta fenetre, et qui correspond au processus de ta fenetre et pas de ton programme, c'est ca? donc pas besoin de l'appeler, c'est juste la fenetre qui s'en charge?
merci d'avance.

ps: comment je fais pour que mon prog soit dans la systray, mais sans fenetre, juste on ouvre le fenetre avec un double click ou une option sur click droit? merci d'avance
0
Rejoignez-nous