首页 > 解决方案 > 为什么 Shell_NotifyIcon 不显示气球通知?

问题描述

我编写了一个示例应用程序来查看如何将气球通知添加到 Win32 应用程序。有人可以指出为什么Shell_NotifyIcon()不显示气球通知吗? GetLastError返回. 2147500037_Shell_NotifyIcon()

#include <Windows.h>
#include "shellapi.h"

int main()
{
    NOTIFYICONDATA nid;
    nid.cbSize = sizeof(NOTIFYICONDATAA_V3_SIZE);
    nid.uTimeout = 500;
    nid.uID = 1;
    nid.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE | NIF_INFO | 0x00000080;
    nid.uCallbackMessage = WM_USER + 200;
    nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
    lstrcpy(nid.szTip, L"Test Tip");
    lstrcpyW(nid.szInfoTitle, L"Test Title");
    Shell_NotifyIcon(NIM_ADD, &nid); //GetLastError returns - 2147500037

    return 0;
 }

标签: c++winapivisual-c++

解决方案


应该使用NOTIFYICONDATA_V3_SIZE而不是NOTIFYICONDATAA_V3_SIZE,因为您清楚地使用 Unicode(从lstrcpyW和看到L"..."),并且您使用默认值NOTIFYICONDATA

应该只使用nid.cbSize = NOTIFYICONDATA_V3_SIZE;or nid.cbSize = sizeof(NOTIFYICONDATA),你不希望有整数常量的大小。

Shell_NotifyIcon调用前还应检查结果GetLastErrror,如果不是FALSEGetLastError则不相关。


推荐阅读