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

时间:2016-08-06 08:31:13

标签: c++ api winapi notifyicon

我有这个代码(来自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;

有人可以帮我吗?我在任务栏中获取空间,但是“透明”。

1 个答案:

答案 0 :(得分:1)

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

IDC_ARROW标识游标而不是图标,因此您将IDC_ARROW与LoadCursor一起使用。进一步如文档中所述,您必须为模块句柄传递NULL,因为它是系统游标。但是你需要在任何情况下都加载一个图标。

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

请不要忽视错误检查。