Как поместить icon в system tray ?
[ATTACH]2515[/ATTACH]
И как после этого работать с icon, т.е. открывать программу
запускаемую данной icon, вообщем если есть примерчики то
посылайте за инфо огромное спасибо + рейтинг !!!
Зарание Огромное спасибо !!!
Конечно хочу, но где проект :confused:
[ATTACH]2517[/ATTACH]
Для вывода balloon в качестве "подсказки" используйте константу NIF_INFO в поле uFlags структуры NOTIFYICONDATA, а также (не обязательно) для вывода иконки, характеризующей сообщение, -dwInfoFlags и szInfoTitle - для вывода заголовка balloon'а.
Да, и не забудьте прописать директиву
или
в заголовочном файле shellapi.h.
Всё выше сказанное справедливо для Visual C++ 7.0; в Visual С++ 6.0 прийдётся изменить саму структуру NOTIFYICONDATA, добавив соответствующие поля, и описать константы. Написание одной из выше приведённых директив обязательно для всех версийх Visual C++.
4. Как добавить иконку на Tray ?
Для работы с SystemTray существует всего одна функция. Вот ее Си-прототип:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage, // message identifier
PNOTIFYICONDATA pnid // pointer to structure
);
Эта функция описана в заголовочном файле Win32-SDK "shellapi.h", включаемом в программу при включении "windows.h". Параметр dwMessage может принимать одно из трех значений: NIM_ADD, NIM_DELETE, NIM_MODIFY. Для добавления иконки он должен быть установлен в NIM_ADD.
Параметр pnid имеет тип PNOTIFYDATA, который описан как:
typedef struct _NOTIFYICONDATA { // nid
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
Поля структуры NOTIFYICONDATA имеют следующий смысл:
• cbSize - размер структуры, должен быть sizeof(NOTIFYICONDATA).
• hUnd - дескриптор окна, которое будет получать события мыши над иконкой.
• uID - уникальный идентификатор иконки. Идентификатор должен быть уникален в пределах окна - обработчика, передаваемого в hWnd.
• uFlags - битовое поле, определяющее какое из следующих полей несет действительную информацию. Может быть одним из следующих значений: NIF_ICON, NIF_MESSAGE, NIF_TIP или их OR-комбинацией.
• uCallbackMessage - сообщение, передаваемое окну - обработчику при событиях мыши. Желательно получать номер сообщения вызовом RegisterWindowMessage(), но допускаются и значения WM_USER+N, где N > 0.
• hIcon - дескриптор иконки, помещаемой на Tray.
• szTip - текст для ToolTip'а, если szTip[0] = 0x00, то ToolTip'а не будет.
Таким образом, для добавления иконки на Tray необходимо заполнить экземпляр структуры NOTIFYICONDATA и вызвать функцию Shell_NotifyIcon() с параметром NIM_ADD и указателем на заполненный экземпляр структуры. При добавлении иконки необходимо заполнить поля cbSize, hWnd, uID, uFlags, uCallbackMessage, hIcon. Поле szTip можно оставить пустым, если вам не нужен ToolTip. Поле uFlags должно содержать как минимум NIF_MESSAGE | NIF_ICON.
[RIGHT]Зарание огромное спасибо !!! [/RIGHT]
iconData.cbSize = sizeof(NOTIFYICONDATA);
iconData.hWnd = hWnd;
iconData.hIcon = hIcon;
iconData.uID = uID;
iconData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
iconData.uCallbackMessage = WM_SHELLNOTE;
А в чем собственно проблемы? Вроде бы сам все написал.
• hWnd - дескриптор окна, которое будет получать события мыши над иконкой. ?
Я не понемаю что надо написать в место
• hWnd - дескриптор окна, которое будет получать события мыши над иконкой. ?
hWnd- дескриптор окна, оконная функция которого обрабатывает сообщения от мыши (перемещение курсора над иконкой, щелчки левой, правой, средней кнопок мыши и т.д.).
Что используем: WinAPI или MFC?
Что используем: WinAPI или MFC?
Используем MFC !
Но как обрабатывать сообщение посылаемын от иконки в System Tray ?
Поле твоей структуры NOTIFYICONDATA:
UINT uCallbackMessage;
.....................................
присваиваешь значение WM_SHELLNOTE, ну и обрабатывашь сообщение WM_SHELLNOTE, вуаля.
Уважаемый koval я прочитал ту ссылку которую вы мне прислали, но когда я начил писать программу я выяснил что некоторые вещи у меня не работают. Например balloon и прочее. У меня стоит VS 6.0 как. Как мне сделать чтобы появлялся balloon и можно было менять иконки во время работы прграммы. Зарание [COLOR="Red"]Спосибо и С Новым Годом !!![/COLOR]
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
CHAR szTip[64];
DWORD dwState;
DWORD dwStateMask;
CHAR szInfo[256];
union {
UINT uTimeout;
UINT uVersion;
} DUMMYUNIONNAME;
CHAR szInfoTitle[64];
DWORD dwInfoFlags;
} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
Добавляете новые макроконстанты, такие как:
#define NIIF_WARNING 0x00000002
#define NIIF_ERROR 0x00000003
#define NIF_STATE 0x00000008
#define NIF_INFO 0x00000010
Это что касается balloon'а.
Замена иконок:
где NIM_MODIFY есть макроконстанта:
'struct CSystemTrayTestDlg::_NOTIFYICONDATAA *' to 'struct _NOTIFYICONDATAA *'
Используйте структуру NOTIFYICONDATA вместо NOTIFYICONDATAA
еrror C2664: 'Shell_NotifyIconA' : cannot convert parameter 2 from 'struct CSystemTrayTestDlg::_NOTIFYICONDATA *' to 'struct _NOTIFYICONDATAA *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Может вы измените мой исходник так чтобы он работал, потому что я всё попробывал но не получается я использовал структуру NOTIFYICONDATA вместо NOTIFYICONDATAA и после этого выдоётся ошибка еrror C2664 [COLOR="Red"]Помогите[/COLOR]
еrror C2664: 'Shell_NotifyIconA' : cannot convert parameter 2 from 'struct CSystemTrayTestDlg::_NOTIFYICONDATA *' to 'struct _NOTIFYICONDATAA *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Я про эту ошибку и говорю... Заменяете NOTIFYICONDATAA на NOTIFYICONDATA и компилируется без ошибок...
Уважаемый SergPas я всё зделал так как вы мне сказали но нечего не выходит я непонемаю в чём дело, пожалуйсто помогите вот исжодник [ATTACH]2575[/ATTACH] как только я пишу Shell_NotifyIcon(NIM_ADD, &tray); компилятор выдоёт ошибку в чём дело я не понемпю !!!
[SIZE=2]Поэтому Вам следует либо как-то переименовать структуру NOTIFYICONDATA в заголовочном файле TestDlg.h и, соответственно, использовать новое имя, либо добавить соответсвующие поля в структуру _NOTIFYICONDATAA и макроконстанты в файле Shellapi.h.[/SIZE]
[SIZE=2]При выполнении одного из двух случаев программа будет компилироваться без ошибок.[/SIZE]
[SIZE=2]В том, что структура NOTIFYICONDATA в подлежащем компиляции файле определена два раза, Вы можете убедиться непосредственно, если откомпилируете исходные файлы из командной строки с опцией /P.
[/SIZE][SIZE=2]
[/SIZE]
memset(&nid, 0, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = AfxGetMainWnd()->m_hWnd;
nid.uID = 12542;
nid.hIcon = m_hIcon;
nid.uCallbackMessage = WM_ShellNote;
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.dwInfoFlags = NIIF_WARNING;
strcpy(nid.szInfo,"sdas");
lstrcpyn(nid.szInfoTitle, "Ýòî ìîÿ èêîíêà", sizeof(nid.szInfoTitle)/sizeof(nid.szInfoTitle[0]));
nid.uTimeout = 10001;
Shell_NotifyIcon(NIM_ADD, &nid);
[COLOR="Red"]Что не так ?[/COLOR]
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
Вместо NIF_TIP используйте NIF_INFO
uTimeout лежит в интервале от 10 до 30 сек.
Установите MSDN!!!