在 C++ 中使用 Win32 Api 在任务栏中设置 NOTIFY ICON

Set NOTIFY ICON in taskbar with Win32 Api in c++

我有这段代码 (来自 Microsoft 页面 here 在任务栏中设置了一个图标,但我无法在其中显示任何图标。

//Notification
    nid.cbSize = sizeof(nid);
    nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID;

    // Note: This is an example GUID only and should not be used.
    // Normally, you should use a GUID-generating tool to provide the value to
    // assign to guidItem.

    static const GUID myGUID =
    { 0x23977b55, 0x10e0, 0x4041,{ 0xb8, 0x62, 0xb1, 0x95, 0x41, 0x96, 0x36, 0x68 } };
    nid.guidItem = myGUID;
    nid.hIcon = LoadIconA(wc.hInstance, IDC_ARROW);
    // This text will be shown as the icon's tooltip.
    StringCchCopy(nid.szTip, ARRAYSIZE(nid.szTip), title);

//TaskBar
        nid.hWnd = hwnd;
        // Show the notification.
        Shell_NotifyIcon(NIM_ADD, &nid) ? S_OK : E_FAIL;

有人可以帮帮我吗?我只在任务栏中得到 space,但是 "transparent".

您加载图标的代码失败。你没有检查错误。如果您这样做了,您会看到 LoadIcon 返回 NULL。

IDC_ARROW 标识光标而不是图标,因此您可以将 IDC_ARROW 与 LoadCursor 一起使用。此外,如文档中所述,您必须为模块句柄传递 NULL,因为它是系统游标。但是无论如何你都需要加载一个图标。

所以,通过加载图标来解决您的问题。确保 LoadIcon returns 的值不是 NULL。通常,您可以通过将图标资源链接到您的可执行文件并加载它来实现。出于测试目的,您可以使用 LoadIcon 文档中描述的预定义图标之一。

请永远不要忽视错误检查。