Суббота
28.06.2025, 14:55
C++ Soft
Приветствую Вас Гость | RSS
Главная Каталог статей Регистрация Вход
Меню сайта

Категории каталога
Windows API [25]
Каталог Windows API функций
Функции конвер. [3]
Функции конвертирования типов данных
Работа с сетью [3]
Недокументированные способы работы с сетью
Другие статьи... [8]
Недокументированные способы программирования

Наш опрос
Язык Visual C++ Win32
Всего ответов: 69

Главная » Статьи » Visual C++ Win32 » Другие статьи...

Как добавить иконку в треей...
Как добавить иконку в треей - самый частый вопрос который задаёт почти каждый начинающий программист.

Для начала добавьте в начало своей программы строку: #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
Категория: Другие статьи... | Добавил: Admin (01.04.2008) | Автор: Михайлов Александр
Просмотров: 1753 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Copyright MyCorp © 2025
Сайт управляется системой uCoz