2 réponses
Salut,
Alors pour iconifier ton appli, un truc du genre:
/*~~~~~~~~~~~~~~~~~*/
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);
}
A+
Damien
Alors pour iconifier ton appli, un truc du genre:
/*~~~~~~~~~~~~~~~~~*/
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);
}
A+
Damien
euh merci beaucoup. est ce que tu pourrais m'expliquer un peu le code stp? recopier une source en essaynt de la faire marcher en coorrigeant les erreurs de compilations m'interesse pas vraiment, et la cest ske je suis parti pr faire, paske je comprend pas grand chose a tt ce code. je capte pas a quoi correspondent les macros, les identifieurs, les fonctions, et les objets.merci d'avance
Salut,
Bon alors la fonction a utiliser est
Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA lpdata
);
avec dwMessage = NIM_ADD pour ajouter une entre dans le systray. lpdata est un pointeur vers une structure NOTIFYICONDATA que tu doit initialiser correctement.
Donc dans mon cas:
tnid.cbSize = sizeof(NOTIFYICONDATA);
//initrialisation de la taille de la structure
tnid.hWnd = this->Handle;
// je positionne le handle de ma fenetre pour qu'elle receoive les messages envoyes par le systray
tnid.uID = ICON_ID;
//ICON_ID est l'Id d'une ressource icone que j'utilise et qui apparaitra dans le systray
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
// j'indique quels sont les champs qui sont valides (ceux que je positionne)
tnid.uCallbackMessage= WM_ICON_MSG;
//j'indique quel message devra etre envoyé à ma fenetre en cas d'action sur l'icon. Ce message sera traité dans ma fonction WndProc
tnid.hIcon = Icon->Handle;
//la je set le handle de mon icon ( a recuperer via LoadIcon)
AnsiString s_tmpappname = "EVATIS-B\0" ;
memcpy(tnid.szTip,s_tmpappname.c_str()
,s_tmpappname.Length());
tnid.szTip[s_tmpappname.Length()] = '\0';
// la c'est une partie un peu inutilement compliqué juste pour setter le texte qui apparaitra en laissant la souris sur l'icone
Shell_NotifyIcon(NIM_ADD, &tnid);
// la fonction magique.
Viola puor qq explications
A+
Damien
Bon alors la fonction a utiliser est
Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA lpdata
);
avec dwMessage = NIM_ADD pour ajouter une entre dans le systray. lpdata est un pointeur vers une structure NOTIFYICONDATA que tu doit initialiser correctement.
Donc dans mon cas:
tnid.cbSize = sizeof(NOTIFYICONDATA);
//initrialisation de la taille de la structure
tnid.hWnd = this->Handle;
// je positionne le handle de ma fenetre pour qu'elle receoive les messages envoyes par le systray
tnid.uID = ICON_ID;
//ICON_ID est l'Id d'une ressource icone que j'utilise et qui apparaitra dans le systray
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
// j'indique quels sont les champs qui sont valides (ceux que je positionne)
tnid.uCallbackMessage= WM_ICON_MSG;
//j'indique quel message devra etre envoyé à ma fenetre en cas d'action sur l'icon. Ce message sera traité dans ma fonction WndProc
tnid.hIcon = Icon->Handle;
//la je set le handle de mon icon ( a recuperer via LoadIcon)
AnsiString s_tmpappname = "EVATIS-B\0" ;
memcpy(tnid.szTip,s_tmpappname.c_str()
,s_tmpappname.Length());
tnid.szTip[s_tmpappname.Length()] = '\0';
// la c'est une partie un peu inutilement compliqué juste pour setter le texte qui apparaitra en laissant la souris sur l'icone
Shell_NotifyIcon(NIM_ADD, &tnid);
// la fonction magique.
Viola puor qq explications
A+
Damien