опубликован 02-01-2002 10:00 MSK
Вот тебе! :-) Правда все это я ваял на API.
#include <winuser.h>#define MYWM_NOTIFYICON 4040
#define IDD_RBUT 103
#define IDD_LBUT 102
NOTIFYICONDATA tnid;
UINT uID=10011;
//Данные для иконки на панели задач (в Tray)
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=MainWindow;
tnid.uID=uID;
tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnid.uCallbackMessage=MYWM_NOTIFYICON;
tnid.hIcon=hIcon;
MyTaskBar=TaskBarAddIcon(hIcon,lpszTip);
//Помещаешь в виндовую функцию
case MYWM_NOTIFYICON:
On_MYWM_NOTIFYICON(hwnd,wParam,lParam);
break;
case WM_DESTROY:
TaskBarDeleteIcon();
PostQuitMessage(0);
break;
//И пишешь примерно такие процедуры
BOOL TaskBarAddIcon(HICON hIcon,LPSTR lpszTip)
{
BOOL res;
//Всплывающая подсказка при наведении мышки
sprintf(lpszTip,"А это я!");
if(lpszTip)lstrcpyn(tnid.szTip,lpszTip,sizeof(tnid.szTip));
else tnid.szTip[0]='\0';
res=Shell_NotifyIcon(NIM_ADD,&tnid);
if(hIcon) DestroyIcon(hIcon);
return res;
}
BOOL TaskBarDeleteIcon(void)
{
BOOL res;
res=Shell_NotifyIcon(NIM_DELETE,&tnid);
return res;
}
void On_MYWM_NOTIFYICON(HWND hwnd,WPARAM wParam, LPARAM lParam)
{
UINT uPar;
UINT uMouseMsg;
uPar=(UINT)wParam;
uMouseMsg=(UINT)lParam;
if(uMouseMsg==WM_LBUTTONDOWN) {
switch (uPar)
{
case uID:
DialogBox(hInstance,MAKEINTRESOURCE(IDD_LBUT),hwnd,(DLGPROC)LBut);
EndDialog(hwnd,TRUE);
break;
default:
break;
}
}
else if(uMouseMsg==WM_RBUTTONDOWN) {
switch (uPar)
{
case uID:
DialogBox(hInstance,MAKEINTRESOURCE(IDD_RBUT),hwnd,(DLGPROC)RBut);
break;
default:
break;
}
};
}
//Реакция на нажатие левой кнопки на иконке в SysTray
//Выскакивает диалоговое окно, которое сам создаешь в ресурсовом редакторе
BOOL CALLBACK LBut(HWND hdwnd,UINT mes,WPARAM wPar,LPARAM lPar)
{
switch(mes)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch(LOWORD(wPar))
{
case IDOK:
EndDialog(hdwnd,TRUE);
return TRUE;
default: return TRUE;
}
default: break;
}
return FALSE;
}
//Реакция на нажатие прав. кнопки на иконке в SysTray
//Выскакивает другое диалоговое окно, которое сам создаешь в ресурсовом редакторе
BOOL CALLBACK RBut(HWND hdwnd,UINT mes,WPARAM wPar,LPARAM lPar)
{
switch(mes)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch(LOWORD(wPar))
{
case IDOK:
EndDialog(hdwnd,TRUE);
DestroyWindow(GetParent(hdwnd));
return TRUE;
case IDCANCEL:
EndDialog(hdwnd,TRUE);
return TRUE;
default: return TRUE;
}
default: break;
}
return FALSE;
}