Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как поместить icon в system tray ?

1.8K
15 декабря 2007 года
ViToBrother
149 / / 13.05.2007
Как поместить icon в system tray
[ATTACH]2515[/ATTACH]

И как после этого работать с icon, т.е. открывать программу
запускаемую данной icon, вообщем если есть примерчики то
посылайте за инфо огромное спасибо + рейтинг !!!

Зарание Огромное спасибо !!!
33K
15 декабря 2007 года
-SaleX-
3 / / 15.12.2007
Если хочешь вот проект!!При сворачивании отправляет в трей!!!
1.8K
15 декабря 2007 года
ViToBrother
149 / / 13.05.2007
Цитата: -SaleX-
Если хочешь вот проект!!При сворачивании отправляет в трей!!!



Конечно хочу, но где проект :confused:

397
16 декабря 2007 года
SergPas
527 / / 03.02.2007
По поводу подсказки, возникающей вследствие перемещения курсора мыши над иконкой трея. Рекомендую использовать balloon вместо стандартного tooltip'а - выглядит эффектней:
[ATTACH]2517[/ATTACH]
Для вывода balloon в качестве "подсказки" используйте константу NIF_INFO в поле uFlags структуры NOTIFYICONDATA, а также (не обязательно) для вывода иконки, характеризующей сообщение, -dwInfoFlags и szInfoTitle - для вывода заголовка balloon'а.
Да, и не забудьте прописать директиву
 
Код:
#define _WIN32_IE 0x0500

или
 
Код:
#define _WIN32_IE 0x0600

в заголовочном файле shellapi.h.
Всё выше сказанное справедливо для Visual C++ 7.0; в Visual С++ 6.0 прийдётся изменить саму структуру NOTIFYICONDATA, добавив соответствующие поля, и описать константы. Написание одной из выше приведённых директив обязательно для всех версийх Visual C++.
1.8K
16 декабря 2007 года
ViToBrother
149 / / 13.05.2007
Друзья я вот прочитал ту информацию которую вы мне прислали в особенности 4 точку и попробовал написать чтото, но у меня возникла проблема с заполнением PNOTIFYICONDATA, если конечно можно вы не поможете мне с этим ?

Цитата:

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]

370
16 декабря 2007 года
koval
443 / / 29.08.2005
К примеру можно так
 
Код:
NOTIFYICONDATA iconData;
    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;

А в чем собственно проблемы? Вроде бы сам все написал.
1.8K
17 декабря 2007 года
ViToBrother
149 / / 13.05.2007
Я не понемаю что надо написать в место
• hWnd - дескриптор окна, которое будет получать события мыши над иконкой. ?
397
17 декабря 2007 года
SergPas
527 / / 03.02.2007
Цитата:

Я не понемаю что надо написать в место
• hWnd - дескриптор окна, которое будет получать события мыши над иконкой. ?


hWnd- дескриптор окна, оконная функция которого обрабатывает сообщения от мыши (перемещение курсора над иконкой, щелчки левой, правой, средней кнопок мыши и т.д.).
Что используем: WinAPI или MFC?

1.8K
17 декабря 2007 года
ViToBrother
149 / / 13.05.2007
Цитата: SergPas
hWnd- дескриптор окна, оконная функция которого обрабатывает сообщения от мыши (перемещение курсора над иконкой, щелчки левой, правой, средней кнопок мыши и т.д.).
Что используем: WinAPI или MFC?



Используем MFC !

370
17 декабря 2007 года
koval
443 / / 29.08.2005
В MFC можно получить хэндл главного окна вот так:
 
Код:
AfxGetMainWnd()->m_hWnd;
1.8K
17 декабря 2007 года
ViToBrother
149 / / 13.05.2007
Вот написаная мной програмка по System Tray [ATTACH]2523[/ATTACH]
Но как обрабатывать сообщение посылаемын от иконки в System Tray ?
370
17 декабря 2007 года
koval
443 / / 29.08.2005
Ну ты же сам все написал.
Поле твоей структуры NOTIFYICONDATA:
Цитата:

UINT uCallbackMessage;


 
Код:
#define WM_SHELLNOTE (WM_APP + 1)
.....................................

присваиваешь значение WM_SHELLNOTE, ну и обрабатывашь сообщение WM_SHELLNOTE, вуаля.
370
17 декабря 2007 года
koval
443 / / 29.08.2005
ЗДЕСЬ есть полное описание работы с System Tray, и есть обертки для MFC
1.8K
07 января 2008 года
ViToBrother
149 / / 13.05.2007
Цитата: koval
ЗДЕСЬ есть полное описание работы с System Tray, и есть обертки для MFC



Уважаемый koval я прочитал ту ссылку которую вы мне прислали, но когда я начил писать программу я выяснил что некоторые вещи у меня не работают. Например balloon и прочее. У меня стоит VS 6.0 как. Как мне сделать чтобы появлялся balloon и можно было менять иконки во время работы прграммы. Зарание [COLOR="Red"]Спосибо и С Новым Годом !!![/COLOR]

397
08 января 2008 года
SergPas
527 / / 03.02.2007
Я же Вам писал, что в MS 6.0 приходится ручками писать код, в частности добавлять поля в структуру NOTIFYICONDATA:
Код:
typedef struct _NOTIFYICONDATAA {
        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_INFO       0x00000001
#define NIIF_WARNING    0x00000002
#define NIIF_ERROR      0x00000003

#define NIF_STATE       0x00000008
#define NIF_INFO        0x00000010

Это что касается balloon'а.
Замена иконок:
 
Код:
Shell_NotifyIcon(NIM_MODIFY, &tray);

где NIM_MODIFY есть макроконстанта:
 
Код:
#define NIM_MODIFY      0x00000001
1.8K
08 января 2008 года
ViToBrother
149 / / 13.05.2007
Я вот [ATTACH]2569[/ATTACH] написал кое что но у меня выдоётся ошибка но что не так я не понемаю. [COLOR="Red"]Помогите пожалуста !!![/COLOR] [COLOR="DarkRed"]А SergPas-у Спасибо[/COLOR]
397
09 января 2008 года
SergPas
527 / / 03.02.2007
Анализируем ошибку компилятора в Вашем коде:
 
Код:
error C2664: 'Shell_NotifyIconA' : cannot convert parameter 2 from
'struct CSystemTrayTestDlg::_NOTIFYICONDATAA *' to 'struct _NOTIFYICONDATAA *'

Используйте структуру NOTIFYICONDATA вместо NOTIFYICONDATAA
1.8K
09 января 2008 года
ViToBrother
149 / / 13.05.2007
[COLOR="Red"]Спасибо SergPas !!![/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
Может вы измените мой исходник так чтобы он работал, потому что я всё попробывал но не получается я использовал структуру NOTIFYICONDATA вместо NOTIFYICONDATAA и после этого выдоётся ошибка еrror C2664 [COLOR="Red"]Помогите[/COLOR]
397
09 января 2008 года
SergPas
527 / / 03.02.2007
Цитата:

е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 и компилируется без ошибок...

1.8K
10 января 2008 года
ViToBrother
149 / / 13.05.2007
Цитата: SergPas
Я про эту ошибку и говорю... Заменяете NOTIFYICONDATAA на NOTIFYICONDATA и компилируется без ошибок...



Уважаемый SergPas я всё зделал так как вы мне сказали но нечего не выходит я непонемаю в чём дело, пожалуйсто помогите вот исжодник [ATTACH]2575[/ATTACH] как только я пишу Shell_NotifyIcon(NIM_ADD, &tray); компилятор выдоёт ошибку в чём дело я не понемпю !!!

397
10 января 2008 года
SergPas
527 / / 03.02.2007
Ваша ошибка заключается в том, что Вы переопределили структуру NOTIFYICONDATA, назвав её так же, как и в файле shellapi.h, так как она уже была включена в исходник после препроцессорной фазы
 
Код:
#include <shellapi.h>

[SIZE=2]Поэтому Вам следует либо как-то переименовать структуру NOTIFYICONDATA в заголовочном файле TestDlg.h и, соответственно, использовать новое имя, либо добавить соответсвующие поля в структуру _NOTIFYICONDATAA и макроконстанты в файле Shellapi.h.[/SIZE]
[SIZE=2]При выполнении одного из двух случаев программа будет компилироваться без ошибок.[/SIZE]
[SIZE=2]В том, что структура NOTIFYICONDATA в подлежащем компиляции файле определена два раза, Вы можете убедиться непосредственно, если откомпилируете исходные файлы из командной строки с опцией /P.

[/SIZE][SIZE=2]
[/SIZE]
1.8K
10 января 2008 года
ViToBrother
149 / / 13.05.2007
У меня нечего не получается SergPas я переименоваю но всё равно нечего, если вам не сложно можете изменить в мой исходник так чтобы он работал и поместить на форуме ? Если конечно вам не трудно ! [COLOR="Red"]Зарание спосибо ! [/COLOR]
397
11 января 2008 года
SergPas
527 / / 03.02.2007
Здесь находится модифицированный проект и файл Shellapi.h. Скопируйте его в каталог Include среды разработки Microsoft Visual Studio 6.0. И всё будет работать. Заметьте, что в файле TestDlg.h структура отсутствует. Я всего лишь изменил её содержимое в файле Shellapi.h, добавив соответсвующие поля.
1.8K
11 января 2008 года
ViToBrother
149 / / 13.05.2007
[COLOR="Red"]SergPas Спасибо ОГРОМНОЕ !!![/COLOR], всё компилируется и роботоет. [COLOR="Red"]Огромное спаспбо !!!![/COLOR] P.S. [COLOR="Red"]Все нажимайте на весы и поднимайте рейтинг SergPas-у !!! [/COLOR]
1.8K
11 января 2008 года
ViToBrother
149 / / 13.05.2007
Почему у меня не получается balloon
Код:
NOTIFYICONDATA nid;
    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, "&#221;&#242;&#238; &#236;&#238;&#255; &#232;&#234;&#238;&#237;&#234;&#224;", sizeof(nid.szInfoTitle)/sizeof(nid.szInfoTitle[0]));
    nid.uTimeout =  10001;
    Shell_NotifyIcon(NIM_ADD, &nid);

[COLOR="Red"]Что не так ?[/COLOR]
397
12 января 2008 года
SergPas
527 / / 03.02.2007
Цитата:

nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;


Вместо NIF_TIP используйте NIF_INFO

Цитата:
nid.uTimeout = 10001;


uTimeout лежит в интервале от 10 до 30 сек.
Установите MSDN!!!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог