проблема — после загрузки ХР или 2000 на некоторых машинах у моей софтины пропадает иконка в трее.. вернее, она там и не появляется даже. Процесс, ессно, запущен, обработка "TaskbarCreated" не помогает..
может кто сталкивался? пока что на ум приходит только постоянное добавление иконы по таймеру но, ИМХО, это не есть хорошо
заранее спасибо
----
Qrot
Re: Приведи код, добавляющий иконку в трей, плиззз (-)
if (::LoadString(_Module.GetResourceInstance(), uResource,
m_nid.szTip, sizeof(m_nid.szTip)/sizeof(m_nid.szTip[0])))
m_nid.uFlags = m_nid.uFlags | NIF_TIP;
BOOL fResult = Shell_NotifyIcon(NIM_ADD, &m_nid);
if (m_nid.hIcon) {
::DestroyIcon(m_nid.hIcon);
m_nid.hIcon = NULL;
}
return fResult;
}
возможно я был не понят — в 99% иконка в трее появляется. иногда не появляется при загрузке 2000/XP если включен autologon
сейчас хочу попробовать сказать NIM_SETVERSION c 0, посмотреть, что получится.
----
Qrot
Re[3]: Приведи код, добавляющий иконку в трей, плиззз
Здравствуйте Qrot, Вы писали:
Q>Здравствуйте ShyLion, Вы писали:
SL>>Возможно программа запускается раньше, чем taskbar SL>>поищи в Knowledge Base по слову "TaskbarCreated"
Q>я же вроде ясно написал — не помогает
Пардон, невнимательно прочел
No brain — No pain
Re[3]: Приведи код, добавляющий иконку в трей, плиззз
Это, дядя, иконку разрушать не надо до ее удаления из трэя. Винда иконки не дублирует — потому и 99% не работает. При обновлении она выкидывает мусор, бо не может нарисать икону.
Q>//в CMainFrm::OnCreate Q>m_taskbar.SetNotifyIcon(m_hWnd, MY_WM_TASKBAR_NOTIFY, IDR_MAINFRAME);
Q>//CTaskbar::SetNotifyIcon Q>BOOL CTaskbar::SetNotifyIcon(HWND hWnd, UINT uCallbackMessage, UINT uResource) Q>{ Q> ATLASSERT(hWnd != NULL); Q> ATLASSERT(uCallbackMessage != 0); Q> ATLASSERT(uResource != 0);
Q> m_nid.cbSize = sizeof(NOTIFYICONDATA); Q> m_nid.hWnd = hWnd; Q> m_nid.uID = 0; Q> m_nid.uFlags = NIF_MESSAGE; Q> m_nid.uCallbackMessage = uCallbackMessage;
Q> m_nid.hIcon = (HICON) ::LoadImage(_Module.GetResourceInstance(), Q> MAKEINTRESOURCE(uResource), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); Q> if (m_nid.hIcon) Q> m_nid.uFlags = m_nid.uFlags | NIF_ICON;
Q> if (::LoadString(_Module.GetResourceInstance(), uResource, Q> m_nid.szTip, sizeof(m_nid.szTip)/sizeof(m_nid.szTip[0]))) Q> m_nid.uFlags = m_nid.uFlags | NIF_TIP; Q> Q> BOOL fResult = Shell_NotifyIcon(NIM_ADD, &m_nid);
Q> if (m_nid.hIcon) { Q> ::DestroyIcon(m_nid.hIcon); Q> m_nid.hIcon = NULL; Q> }
Q> return fResult; Q>}
Q>возможно я был не понят — в 99% иконка в трее появляется. иногда не появляется при загрузке 2000/XP если включен autologon Q>сейчас хочу попробовать сказать NIM_SETVERSION c 0, посмотреть, что получится.
Re[4]: Приведи код, добавляющий иконку в трей, плиззз
Здравствуйте Dutchman, Вы писали:
D>Здравствуйте Qrot, Вы писали:
D>Это, дядя, иконку разрушать не надо до ее удаления из трэя. Винда иконки не дублирует — потому и 99% не работает. При обновлении она выкидывает мусор, бо не может нарисать икону.
Вам же сказали уже: Q>>[skip] Q>>возможно я был не понят — в 99% иконка в трее появляется. иногда не появляется при загрузке 2000/XP если включен autologon
А во-вторых — после вызова Shell_NotifyIcon() икону удалять можно.