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 ;
}
Вопрос по WinAPI Tray
Пробовал засунуть в WM_INITDIALOG. Все бы хорошо, НО при завершении работы процесса Explorer.exe и при его запуске иконка не появляется, т.е.
1. иконка в трее есть
2. вызываем Диспетчер задач -> Завершить процесс Explorer.exe
3. там же Файл\Новая задача (Выполнить...) Explorer.exe
4. в трее иконка моей проги не появляется.
Как это решить? Вот код:
Код:
этом написано - поверь это то, что тебе нужно - там и пример есть. только вместо WM_CREATE используй WM_INITDIALOG
ну вообще-то в msdn'е все об
Код:
case WM_INITDIALOG:
UINT s_uTaskbarRestart = RegisterWindowMessage("TaskbarCreated");
//.........
break;
default:
if(msg == s_uTaskbarRestart)
AddTaskbarIcon(hTrayIcon);
}
UINT s_uTaskbarRestart = RegisterWindowMessage("TaskbarCreated");
//.........
break;
default:
if(msg == s_uTaskbarRestart)
AddTaskbarIcon(hTrayIcon);
}