· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Вопрос по NOTIFYICONDATAA

Посл.отвђт Сообщенiе


Дата: Июн 3, 2003 17:52:59

Прошу исправить мои ошибки,а то не могу получить подсказку другого вида на иконке в трее. С обычной подсказкой проблем нет. OS Window2k, Explorer 5
Думаю, что ошибка в структуре, писал с ShellAPI.h MSDN

NIF_MESSAGE equ 1h
NIF_ICON equ 2h
NIF_TIP equ 4h
NIF_STATE equ 8h
NIF_INFO equ 10h

NOTIFYICONDATAA STRUCT
cbSize DWORD ?
hwnd DWORD ?
uID DWORD ?
uFlags DWORD ?
uCallbackMessage DWORD ?
hIcon DWORD ?
szTip BYTE 128 dup (?)
dwState DWORD ?
dwStateMask DWORD ?
szInfo BYTE 256 dup (?)
uTimeout DWORD ?
uVersion DWORD ?
szInfoTitle BYTE 64 dup (?)
dwInfoFlags DWORD ?
NOTIFYICONDATAA ENDS

AppName db "Имя",0
AppInfo db "Подсказка",0

.if uMsg == WM_CREATE

mov note.cbSize,sizeof NOTIFYICONDATA
push hWin
pop note.hwnd
mov note.uID,IDI_TRAY
mov note.uFlags,NIF_ICON or NIF_MESSAGE or NIF_TIP or NIF_INFO
mov note.uCallbackMessage,WM_SHELLNOTIFY
mov eax,hIcon
mov note.hIcon,eax
mov note.uTimeout,1500
invoke lstrcpy,addr note.szTip,addr AppName
invoke lstrcpy,addr note.szInfo,addr AppInfo
invoke Shell_NotifyIcon,NIM_ADD,addr note

И вопрос по NOTIFYICONDATAA_V1_SIZE , что с ней делать?


Дата: Июн 4, 2003 04:36:26

Dust112
szTip BYTE 128 dup (?)
szTip BYTE 64 dup (?)

mov note.cbSize,sizeof NOTIFYICONDATA
mov note.cbSize,sizeof NOTIFYICONDATAA

И вопрос по NOTIFYICONDATAA_V1_SIZE, что с ней делать?
А это и есть sizeof NOTIFYICONDATA, т.е. устаревшая версия Shell32 (без szInfo, szInfoTitle...)


Дата: Июн 4, 2003 05:54:44

Dust112
+ Quantum
uTimeout и uVersion - это UNION и занимают они один DWORD вместе.

Quantum
устаревшая версия
Я бы сказал, что NOTIFYICONDATAA_V1_SIZE - это размер минимальной/достаточной структуры NOTIFYICONDATA (cbSize + ... + szTip[64]).

Dust112
вопрос по NOTIFYICONDATAA_V1_SIZE
Посмотрите последние три абзаца из NOTIFYICONDATA Structure.


Дата: Июн 4, 2003 23:23:12

Тогда наивный вопрос, как мне записать uTimeout и uVersion в структуре:

uTimeout BYTE ?
uVersion BYTE ?

Спасибо что откликнулись.


Дата: Июн 5, 2003 03:14:54

Dust112
как мне записать uTimeout и uVersion
. . .
szInfo BYTE 256 dup (?)
union
uTimeout dd ?
uVersion dd ?
ends
szInfoTitle BYTE 64 dup (?)
. . .

+ Там ещё можно добавить guidItem в конец структуры.

P2M
NOTIFYICONDATAA_V1_SIZE - это размер минимальной/достаточной структуры NOTIFYICONDATA
В MSDN ясно написано, что мол "Using this value for cbSize will allow your application to use NOTIFYICONDATA with earlier Shell32.dll versions"


Дата: Июн 5, 2003 04:48:48

Quantum
В MSDN ясно написано ...
Imho это написано после:
[code]
nid.cbSize = NOTIFYICONDATA_V2_SIZE;
[/code]
Тем не менее, применительно к NOTIFYICONDATA_V1_SIZE я интерпретирую эту фразу так: "Хотите поддержки NOTIFYICONDATA, используйте как минимум поля с cbSize по szTip[64]" или "Для поддержки NOTIFYICONDATA достаточно использовать структуру с полями с cbSize по szTip[64]".

По поводу:
Dust112 > szTip BYTE 128 dup (?)
Quantum > szTip BYTE 64 dup (?)
Не знаю, почему описание структуры NOTIFYICONDATA в online msdn отличается от msdn на CD (2002-JAN) и из shellapi.h (PSDK-NOV-2002). :(
[code]
// shellapi.h PSDK-NOV-2002
// size: 33'013 байт
// date: 19.11.2002
...
#if (_WIN32_IE < 0x0500)
CHAR szTip[64];
#else
CHAR szTip[128];
#endif
...
[/code]
Afaik ballon (судя по NIF_INFO и TTF_BALOON) поддерживается, начиная с версии IE 5.00, у меня не получилось отобразить его, если szTip[64], со 128 получилось.


Дата: Июн 5, 2003 21:47:14

P2M
Imho это написано после: ...
Согласен, но это относится и к NOTIFYICONDATA_V1_SIZE.

NOTIFYICONDATA_V1 == shell Windows 95 и 98
NOTIFYICONDATA_V2 == shell Windows ME и 2000
+ самый последний shell только в XP


Дата: Июн 5, 2003 22:00:43

P2M
Afaik ballon (судя по NIF_INFO и TTF_BALOON) поддерживается, начиная с версии IE 5.00
NOTIFYICONDATA не связан с comctl32.dll. Поэтому, присутствие последней версии IE не гарантирует поддержки новой оболочки. Запись #if (_WIN32_IE < 0x0500) в shellapi.h следует считать неправильной.


Дата: Июн 6, 2003 04:38:36 · Поправил: P2M

Quantum
NOTIFYICONDATA не связан с comctl32.dll
Это как посмотреть.
NIF_INFO (для balloon'ов в Tray'е) определен в shellapi.h, а сами ToolTip'ы в commctrl.h.
В psdk написано, что установка _WIN32_IE в значение 0x0501 предполагает разработку приложения для Comctl32.dll version 5.81 and later, and Shell32.dll and Shlwapi.dll version 5.0 and later

Запись #if (_WIN32_IE < 0x0500) в shellapi.h следует считать неправильной.
:( Откуда такая информация?


Дата: Июн 6, 2003 05:47:59 · Поправил: Quantum

P2M
Это как посмотреть
Я к тому, что у юзверя может стоять хоть IE6 на древнем пне с Windows 95. Исходя из вашего примера из shellapi.h, на такой машине можно показывать balloon в Tray'е... но это не соответствует действительности (можете проверить); ведь IE не апгрейдит shell, а старый shell из Windows 95 (максимум v4.72) не поддерживает инфу по ballons в NOTIFYICONDATA.

Откуда такая информация?
Извиняюсь,
оказывается WIN32_IE распространяется как на comctl32.dll, так и на shell32.dll. Странные у VC наименования макросов, однако... Ещё раз извиняюсь :(


Дата: Июн 6, 2003 09:19:25

Quantum
Исходя из вашего примера ... на такой машине можно показывать balloon
Ни коим образом.
Объявление в программе:
[code]
#define _WIN32_IE 0x0501
[/code]
не более чем уведомление программистом компилятора о желании использовать возможности (функции, константы и т.п.)Comctl32.dll version 5.81 and later, and Shell32.dll and Shlwapi.dll version 5.0 and later. Оно (объявление) не избавляет программиста от необходимости в run-time проверять версии присутствующих dll'ин и принимать решение, что делать, если они (версии) недостаточны.


Дата: Июн 6, 2003 16:35:49

Спасибо что столько людей откликнулось, всё заработало, только надо написать
szTip BYTE 128 dup (?)
Получается вся структуро такова:
NOTIFYICONDATAA STRUCT
cbSize DWORD ?
hwnd DWORD ?
uID DWORD ?
uFlags DWORD ?
uCallbackMessage DWORD ?
hIcon DWORD ?
szTip BYTE 128 dup (?)
dwState DWORD ?
dwStateMask DWORD ?
szInfo BYTE 256 dup (?)
union
uTimeout DD ?
uVersion DD ?
ends
szInfoTitle BYTE 64 dup (?)
dwInfoFlags DWORD ?
NOTIFYICONDATAA ENDS
Всё помойму тема закрыта.


Дата: Июн 6, 2003 18:44:58

P2M
Ни коим образом
Спасибо! Я уже понял, что запутался в собственных умозаключениях :(

Dust112
Всё помойму тема закрыта.
Присоединяюсь