СообЧа > База Знаний > Программирование > C, С++ > Borland C++ Builder

Вопрос

А как загнать программу в трей?

Ответ

#define WM_TRAYNOTIFY (WM_APP+100) NOTIFYICONDATA nid;
заполняешь nid и вызываешь ZeroMemory(&nid,sizeof(NOTIFYICONDATA));
nid.cbSize=sizeof(NOTIFYICONDATA);
nid.hWnd=hWnd; nid.uCallbackMessage=WM_TRAYNOTIFY;
nid.uFlags|=NIF_MESSAGE;
nid.hIcon=LoadIcon(GetModuleHandle(0),(LPCTSTR)lpIconName);
nid.uFlags|=NIF_ICON;
lstrcpyn(nid.szTip,lpcszToolTip,(lLen<64)? lLen:63);
nid.szTip[64]=0;
nid.uFlags|=NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&nid));
на выходе из проги Shell_NotifyIcon(NIM_DELETE,&nid));
LRESULT CALLBACK WndProcMainDialog(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ switch (message)
{ … case WM_TRAYNOTIFY: switch (LOWORD(lParam))
{ case WM_LBUTTONDOWN: WINDOWPLACEMENT wndpl;
wndpl.length=sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd,&wndpl);
if (wndpl.showCmd==SW_HIDE
|| wndpl.showCmd==SW_MINIMIZE
|| wndpl.showCmd==SW_SHOWMINIMIZED)
{ ShowWindow(hWnd,SW_SHOW);
ShowWindow(hWnd,SW_SHOWNORMAL);
}else{
ShowWindow(hWnd,SW_MINIMIZE);
} PostMessage(hWnd,WM_NULL,0,0);
break; case WM_RBUTTONDOWN: //POINT Point;
SetForegroundWindow(hWnd);
//GetCursorPos(&Point);
//TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, Point.x,Point.y,0,hWnd, NULL);
PostMessage(hWnd,WM_NULL,0,0);
break;
} break;
… } return 0; }


Это все выдернуто из проекта, поэтому потребуется небольшая переделка, а вообще лучше это оформить классом, очень удобно.

Из конференции Expert_FAQ

в C++Builder 6 есть компенет «TrayIcon» в закладке «Simple»

1989mka



Copyright © 2000-2004 Сообщество Чайников
Контактная информация