Почему значок в системном трее очищает ранее отображенный? - PullRequest
2 голосов
/ 27 октября 2011

У нас есть приложение, которое использует различные значки на панели задач для общения с пользователями.Различные значки указывают на разные внутренние состояния (в противном случае окна) приложения.Мы реализовали наш системный трей, используя код из этого проекта Code Guru (версия MFC; это ни в коем случае не новое приложение), и до недавнего времени он работал нормально.Однако недавно мы попытались добавить еще один значок и столкнулись с проблемами.

Вот как предполагается работать:

  1. У нас есть одинГлавный значок (назовите его «A»), который указывает, что приложение запущено.

  2. Если происходит определенное событие, мы отображаем значок «B», над которым пользователь может навести курсор мышичтобы получить подсказку со статусом относительно этого события.

  3. Если запускается (недавно добавленная, внутренняя, потоковая) процедура, мы отображаем значок «C», и снова пользователь может навести на него курсор мыши, чтобы увидеть всплывающую подсказку, отображающую ходэто действие.

Что происходит на самом деле : если значок «B» виден, когда мы (пытаемся) отобразить значок «C», то значок «B» либополностью исчезает, никогда не возвращается, или остается там, и значок «C» никогда не появляется, но всплывающая подсказка для значка «B» заменяется на значок «C».

Я упростилсценарий немного;на самом деле у нас есть несколько других иконок, но они используются редко.Однако у нас никогда не было проблем с отображением нескольких значков, пока мы не добавили значок «C» в последние пару недель.

Есть идеи?Рада разъяснить что-то, что я не объяснил хорошо.

1 Ответ

4 голосов
/ 27 октября 2011

Вам нужно использовать разные uID для каждого значка. документация гласит:

Определенный приложением идентификатор значка на панели задач. Командная консоль использует либо (hWnd плюс uID), либо guidItem, чтобы определить, какой значок следует использовать при вызове Shell_NotifyIcon Вы можете иметь несколько значков, связанных с одним hWnd, назначая каждому свой uID. Если указан guidItem, uID игнорируется.

Другими словами, вам нужно выбрать значение для uID. Вот как оболочка знает, на какую иконку вы ссылаетесь каждый раз, когда вы звоните Shell_NotifyIcon(). Очевидно, что вы должны использовать разные значения для каждого значка. Итак, используйте 0 для значка A, 1 для значка B и т. Д.

...