Shell_NotifyIcon NIF_INFO未显示图标

时间:2013-11-02 22:47:44

标签: winapi user32

我遇到气球问题首先他们拒绝显示但发现了这个帖子:

Why aren't Shell_NotifyIcon balloon tips working?

然后将cbSize更改为504,气球显示但没有图标,所有标准图标都不会显示,自定义图标,结构也不会显示如下:

 cbSize = 504
 hWnd = HDL
 uID = 10
 uFlags = NIF_INFO
 szInfo = sBody
 uTimeout = 20000
 szInfoTitle = sTitle
 dwInfoFlags = NIIF_ERROR

有谁知道图标失败的原因? (已尝试过各种组合中的所有结构尺寸和uVersion)

编辑:

S.cbSize = 504;
S.hWnd = HDL;
S.uID = 101;
S.uFlags = NIF_MESSAGE + NIF_ICON + NIF_TIP;
S.uCallbackMessage = 0x4DE;
S.hIcon = iHDL;
S.szTip = sTooltip;
S.uVersion = 3;
S.dwInfoFlags = NIIF_NONE;
Shell32.Shell_NotifyIconA(NIM_ADD,S:GetPointer())
Shell32.Shell_NotifyIconA(NIM_SETVERSION,S:GetPointer())

用于创建托盘图标,它确实:

enter image description here

所有回调消息都可以使用更改工具提示/更改图标/设置焦点/删除托盘图标功能也可以在XP和Win 8.1上正常工作所有使用cbSize = 504和uVersion = 3使用Ansi NIM_SETVERSION和NOTIFYICONDATA,气球将显示它只是没有图标甚至不显示默认图标:

S.cbSize = 504;
S.hWnd = HDL
S.uID = 101
S.uFlags = NIF_INFO
S.szInfo = sBody
S.uTimeout = 20000
S.szInfoTitle = sTitle
S.dwInfoFlags = NIIF_ERROR
Shell32.Shell_NotifyIconA(NIM_MODIFY,S:GetPointer())

enter image description here

使用cbSize的结构大小适用于除气球之外的所有内容,它们甚至不显示,并且该大小报告为688。

1 个答案:

答案 0 :(得分:1)

cbSize=504只有在使用Shell_NotifyIcon()NOTIFYICONDATA的Ansi版本,正在使用NOTIFYICONDATA的XP(v3)版本以及您的编译器&#时才有意义39; s对齐设置实际上正确对齐NOTIFYICONDATA字段,因此XP字段排列恰好为504字节。如果没有看到您的实际代码,编译器设置或任何上下文信息,则无法进一步解决您的问题。