Установите ЗНАЧОК УВЕДОМЛЕНИЯ на панели задач с помощью Win32 Api в С++

У меня есть этот код (со страницы Microsoft здесь), который установил значок на панели задач, но я не могу отобразить на нем значок.

//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;

Может ли кто-нибудь помочь мне, пожалуйста? Я получаю только место на панели задач, но «прозрачное».


person Jose    schedule 06.08.2016    source источник


Ответы (1)


Ваш код для загрузки значка не работает. Вы не проверили ошибки. Если бы вы сделали это, то увидели бы, что LoadIcon вернул NULL.

IDC_ARROW идентифицирует курсор, а не значок, поэтому вы должны использовать IDC_ARROW с LoadCursor. Далее, как объясняется в документации, вам нужно будет передать NULL для дескриптора модуля, поскольку это системный курсор. Но загружать иконку нужно в любом случае.

Итак, исправьте свою проблему, загрузив значок. Убедитесь, что LoadIcon возвращает значение, отличное от NULL. Обычно вы делаете это, связывая ресурс значка с вашим исполняемым файлом и загружая его. В целях тестирования вы можете использовать один из предопределенных значков, как описано в документации для LoadIcon.

И, пожалуйста, никогда не пренебрегайте проверкой ошибок.

person David Heffernan    schedule 06.08.2016