powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по WinAPI Tray
2 сообщений из 2, страница 1 из 1
Вопрос по WinAPI Tray
    #34239245
XYLIGAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Куда помещать определение и создание иконки трея, если главное окно загружается как диалог из ресурсов (то есть не используется CreateWindow и не происходит события WM_CREATE).

Пробовал засунуть в WM_INITDIALOG. Все бы хорошо, НО при завершении работы процесса Explorer.exe и при его запуске иконка не появляется, т.е.
1. иконка в трее есть
2. вызываем Диспетчер задач -> Завершить процесс Explorer.exe
3. там же Файл\Новая задача (Выполнить...) Explorer.exe
4. в трее иконка моей проги не появляется.
Как это решить? Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
NOTIFYICONDATA nid;
HICON hIcon;

INT_PTR APIENTRY MainProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ //Создаём окно расписанное в Res.rc
  int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_MAINDIALOG),NULL,(DLGPROC)MainProc) ;
  return ret;
}
//---------------------------------------------------------------------------
INT_PTR APIENTRY MainProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch (msg){
    case WM_INITDIALOG:
            hIcon = LoadIcon(GetModuleHandle(NULL), "MYICON");
            nid.cbSize = sizeof(nid);
            nid.hWnd = hwnd;            
            nid.hIcon = hIcon;
            lstrcpyn(nid.szTip, "Пример трея", sizeof(nid.szTip)/sizeof(nid.szTip[ 0 ]));
            nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
            Shell_NotifyIcon(NIM_ADD, &nid);
            break ;
    case WM_CLOSE:
            Shell_NotifyIcon(NIM_DELETE, &nid);
            EndDialog(hwnd,  0 );
            break;
  }
  return FALSE ;
}
...
Рейтинг: 0 / 0
Вопрос по WinAPI Tray
    #34242236
XYLIGAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался. Вот так работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
case WM_INITDIALOG:
  UINT s_uTaskbarRestart = RegisterWindowMessage("TaskbarCreated");
  //.........
  break;

default: 
  if(msg == s_uTaskbarRestart)  
     AddTaskbarIcon(hTrayIcon);
}
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по WinAPI Tray
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]