HPC.ru lite - Все форумы
Форум: Программирование для КПК
Тема: Срочно требуется помощь.... заранее благодарен.

[Ответить]
un_ [05.08.2005 15:47] Срочно требуется помощь.... заранее благодарен.:
Доброго всем здравия. Возникла проблема никак не могу победить раньше писал на вижуал си плюс шестой щас вот решил писать для налодонника все что знал раньше половина не канает.... Дык вот пишу программульку и надо чтобы иконка в трей садилась.. так вот она садится а картинки не видать и комманды обрабатывает... вот код что не правильно?

NOTIFYICONDATA nf;

nf.hWnd = m_hWnd;
nf.uID = NULL;

nf.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nf.uCallbackMessage = WM_MYICONNOTIFY;
// strcpy(nf.szTip,LPCSTR("Mail demon!"));

HICON hIcon;
hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
nf.hIcon = hIcon;
Shell_NotifyIcon(NIM_ADD,&nf);
if (nf.hIcon == NULL)
{
mes("Немогу создать иконку в трее!");
CDialog::OnCancel();
}
ShiFt [07.08.2005 14:40] :
imho, у покета нет понятия "трей". Тебе, наверное, сюда: http://www.pocketpcdn.com/articles/taskbar_icon.html
un_ [08.08.2005 19:04] :
может и нету но значки то некоторых прог там появляються... а ту ссылку что ты дал оно конечно может и то только это верх а мне надо в нижнюю часть добавить!

вот пример:http://www.zaomiramax.ru/file/pic.jpg
ShiFt [09.08.2005 14:19] :
Используй тот-же метод, но хэндл ищи не по "HHTaskBar", а "worker", которое дочернее к "menu_worker" без использования FindWindow(), т.к. она не ищет дочерние окна и вернет другой "worker". В этом случае твоя иконка будет представлять окно, в контексте которого рисуй что хош + сам задаешь позицию и размеры этого окошка и заботишься о том, чтобы оно не перекрывало другие иконки.
Но ты все правильно делал, а иконки нет потому что она не загружается, ты if'ом проверяешь не факт установки иконки Shell_NotifyIcon(), а отработку CWinApp::LoadIcon(), в твоем случае NULL возвращающей. Попробуй просто LoadIcon(). И структуру неплохо обнулить, и Shell_NotifyIcon() возврат проверить. Кстати, если nf.uID = 0 - иконка посередине ставится, а не в правый угол.
un_ [09.08.2005 19:08] :
Если мне не изменяет память то nf.uID= это идентификатор чтобы потом иконку из трея убить по завершению процесса.....
Пробовал LoadIcon(); все тоже самое... мож там размер какойнибуть или цвета спец нужны ?.... ниче не могу понять дайте если у кого есть кусок рабочего кода!!! заранее благодарен!
ShiFt [10.08.2005 04:57] :
Этот код работает. Если иконка не загружается, попробуй другую, заведомо корректную - кое-какие ограничения на иконы существуют.
Память по .uID тебе не изменяет, но если = 0, иконка в середину прыгает.

NOTIFYICONDATA nIcon;
memset(&nIcon, 0, sizeof(nIcon));
nIcon.cbSize = sizeof(nIcon);
nIcon.hWnd = hWnd;
nIcon.uID = 1;
nIcon.uFlags = NIF_ICON;
nIcon.uCallbackMessage = NULL;
nIcon.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));
nIcon.szTip = 0;

if (nIcon.hIcon)
{
if (!Shell_NotifyIcon(NIM_ADD, &nIcon))
MessageBox(0, L"Status bar add icon failed", L"Error", MB_OK);
}
else
MessageBox(0, L"Icon load failed", L"Error", MB_OK);
un_ [10.08.2005 20:23] :
Вроде причину нашол иконку строго надо одну 16х16! и все ок
[Ответить]