Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос по WinAPI Tray

21K
06 января 2007 года
AL_XA
5 / / 23.12.2006
Куда помещать определение и создание иконки трея, если главное окно загружается как диалог из ресурсов (то есть не используется CreateWindow и не происходит события WM_CREATE).

Пробовал засунуть в WM_INITDIALOG. Все бы хорошо, НО при завершении работы процесса Explorer.exe и при его запуске иконка не появляется, т.е.
1. иконка в трее есть
2. вызываем Диспетчер задач -> Завершить процесс Explorer.exe
3. там же Файл\Новая задача (Выполнить...) Explorer.exe
4. в трее иконка моей проги не появляется.
Как это решить? Вот код:

Код:
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 ;
}
257
06 января 2007 года
kosfiz
1.6K / / 18.09.2005
ну вообще-то в msdn'е все об этом написано - поверь это то, что тебе нужно - там и пример есть. только вместо WM_CREATE используй WM_INITDIALOG
21K
09 января 2007 года
AL_XA
5 / / 23.12.2006
Вот так работает:
 
Код:
case WM_INITDIALOG:
  UINT s_uTaskbarRestart = RegisterWindowMessage("TaskbarCreated");
  //.........
  break;

default:
  if(msg == s_uTaskbarRestart)  
     AddTaskbarIcon(hTrayIcon);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог