Как добавить иконку в треей - самый частый вопрос который задаёт почти каждый начинающий программист.
Для начала добавьте в начало своей программы строку: #include и HICON hIcon1;
Потом после строк загрузки главного окна добавте код:
//Создание меню для Tray:
char WndClassNameE[] = "wndclassname"; MSG msg; WNDCLASSEX wnd; wnd.cbClsExtra = 0; wnd.cbSize = sizeof(wnd); wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//Загрузка курсора wnd.hIcon = 0; wnd.hIconSm = 0; wnd.hInstance = hInst; wnd.lpfnWndProc = WndProc; wnd.lpszClassName = WndClassNameE; wnd.lpszMenuName = 0; wnd.style = CS_HREDRAW | CS_VREDRAW; RegisterClassEx(&wnd);//Регистрация класса
HWND hMenuTray; hMenuTray= CreateWindowA(WndClassNameE,"Context Menu",WS_OVERLAPPEDWINDOW,100,100,500,300,hWnd,NULL,(HINSTANCE)
GetWindowLong(hMenuTray,GWL_HINSTANCE),NULL); IDMenuTray=GetDlgCtrlID(hMenuTray);//Получение ID зная hWnd ////Конец создания контекстного меню для Tray hIcon1=LoadIcon(NULL,IDI_APPLICATION);//Загрузка иконки TrayMessage(hWnd,NIM_ADD,0,hIcon1,NULL);
Далее в обработчик сообщений добавить код:
case MYWM_NOTIFYICON: switch(lParam) { case WM_RBUTTONUP: DWORD dwThreadId; HMENU menu;menu=LoadMenu(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_MENU_TRAY));//Загрузка меню menu=GetSubMenu(menu,0); POINT lpPoint;GetCursorPos(&lpPoint); SetForegroundWindow(hWnd); TrackPopupMenuEx(menu,NULL,lpPoint.x,lpPoint.y,hMenuTray,NULL);//Вывод меню break; default: return DefWindowProc(hWnd, message, wParam, lParam); }
Тепер самая главная функция TrayMessage, добавьте этот код в свою программу:
BOOL TrayMessage(HWND hDlg, DWORD dwMessage, UINT uID, HICON hIcon, PSTR pszTip) { BOOL res;NOTIFYICONDATA tnd; tnd.cbSize = sizeof(NOTIFYICONDATA);tnd.hWnd = hDlg; tnd.uID = uID;tnd.uFlags =NIF_MESSAGE|NIF_ICON|NIF_TIP;tnd.uCallbackMessage = MYWM_NOTIFYICON; tnd.hIcon = hIcon; if(pszTip)
{
lstrcpyn(tnd.szTip,pszTip,sizeof(tnd.szTip)); }
else
{ tnd.szTip[0] = '\0'; } res = Shell_NotifyIcon(dwMessage, &tnd); return res;}
Внимание!!!
Не забудьте в ресурсах создать меню с ID IDC_MENU_TRAY
|