магическое не попадание иконы в трей
От: Qrot Россия  
Дата: 10.06.02 16:52
Оценка:
Hi ALL!

проблема — после загрузки ХР или 2000 на некоторых машинах у моей софтины пропадает иконка в трее.. вернее, она там и не появляется даже. Процесс, ессно, запущен, обработка "TaskbarCreated" не помогает..
может кто сталкивался? пока что на ум приходит только постоянное добавление иконы по таймеру но, ИМХО, это не есть хорошо

заранее спасибо
----
Qrot
Re: Приведи код, добавляющий иконку в трей, плиззз (-)
От: NavuhodonosoR Россия  
Дата: 11.06.02 04:14
Оценка:
Re[2]: Приведи код, добавляющий иконку в трей, плиззз
От: Qrot Россия  
Дата: 11.06.02 05:35
Оценка:
//в CMainFrm::OnCreate
m_taskbar.SetNotifyIcon(m_hWnd, MY_WM_TASKBAR_NOTIFY, IDR_MAINFRAME);

//CTaskbar::SetNotifyIcon
BOOL CTaskbar::SetNotifyIcon(HWND hWnd, UINT uCallbackMessage, UINT uResource)
{
ATLASSERT(hWnd != NULL);
ATLASSERT(uCallbackMessage != 0);
ATLASSERT(uResource != 0);

m_nid.cbSize = sizeof(NOTIFYICONDATA);
m_nid.hWnd = hWnd;
m_nid.uID = 0;
m_nid.uFlags = NIF_MESSAGE;
m_nid.uCallbackMessage = uCallbackMessage;

m_nid.hIcon = (HICON) ::LoadImage(_Module.GetResourceInstance(),
MAKEINTRESOURCE(uResource), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
if (m_nid.hIcon)
m_nid.uFlags = m_nid.uFlags | NIF_ICON;

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]: Приведи код, добавляющий иконку в трей, плиззз
От: ShyLion  
Дата: 11.06.02 11:26
Оценка:
Возможно программа запускается раньше, чем taskbar
поищи в Knowledge Base по слову "TaskbarCreated"
No brain — No pain
Re[2]: Приведи код, добавляющий иконку в трей, плиззз (-)
От: Аноним  
Дата: 11.06.02 12:55
Оценка:
Здравствуйте NavuhodonosoR, Вы писали:

NR>

Земля — приют на миг, а жизнь чудесный вздор.
Re[4]: Приведи код, добавляющий иконку в трей, плиззз
От: Qrot Россия  
Дата: 11.06.02 14:20
Оценка:
Здравствуйте ShyLion, Вы писали:

SL>Возможно программа запускается раньше, чем taskbar

SL>поищи в Knowledge Base по слову "TaskbarCreated"

я же вроде ясно написал — не помогает
----
Qrot
Re[5]: Приведи код, добавляющий иконку в трей, плиззз
От: ShyLion  
Дата: 13.06.02 01:30
Оценка:
Здравствуйте Qrot, Вы писали:

Q>Здравствуйте ShyLion, Вы писали:


SL>>Возможно программа запускается раньше, чем taskbar

SL>>поищи в Knowledge Base по слову "TaskbarCreated"

Q>я же вроде ясно написал — не помогает

Пардон, невнимательно прочел
No brain — No pain
Re[3]: Приведи код, добавляющий иконку в трей, плиззз
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.06.02 06:47
Оценка: -1
Здравствуйте Qrot, Вы писали:


Это, дядя, иконку разрушать не надо до ее удаления из трэя. Винда иконки не дублирует — потому и 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]: Приведи код, добавляющий иконку в трей, плиззз
От: NavuhodonosoR Россия  
Дата: 14.06.02 07:11
Оценка:
Здравствуйте Dutchman, Вы писали:

D>Здравствуйте Qrot, Вы писали:



D>Это, дядя, иконку разрушать не надо до ее удаления из трэя. Винда иконки не дублирует — потому и 99% не работает. При обновлении она выкидывает мусор, бо не может нарисать икону.


Вам же сказали уже:
Q>>[skip]
Q>>возможно я был не понят — в 99% иконка в трее появляется. иногда не появляется при загрузке 2000/XP если включен autologon

А во-вторых — после вызова Shell_NotifyIcon() икону удалять можно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.