Уроки Iczelion'а



         

Урок 23. Иконка в system tray


На этом Уроке мы узнаем, как помещать иконки в system tray и как создавать/использовать всплывающее меню.

Пpимеp можете скачать здесь.

Теория:

System tray - это прямоугольная область панели задач, в которой располагаются несколько иконок. Скорее всего, вы обнаружите там как минимум цифровые часы. Вы можете самостоятельно помещать иконки в system tray. Далее приводятся шаги, которые нужно для этого выполнить:

  • Заполните структуру NOTIFYICONDATA, содержащую следующие поля:

  • cbSize - размер данной структуры.
  • hwnd - хэндл окна, которое будет получать уведомление, когда над иконкой в tray'e произойдёт событие мыши.
  • uID - константа, используемая в качестве идентификатора иконки. Вы сами выбираете значение этой константе. В случае, если вы поместили в system tray несколько иконок, вы сможете узнать, над какой именно из них произошло событие мыши.
  • uFlags - указывает, какие поля данной структуры заполнены

  • NIF_ICON Поле hIcon заполнено.
  • NIF_MESSAGE Поле uCallbackMessage заполнено.
  • NIF_TIP Поле szTip заполнено.

  • uCallbackMessage - пользовательское сообщение, которое Windows отошлёт указанному в поле hwnd окну, в случае, когда над иконкой произойдёт событие мыши. Сообщение вы создаете сами.
  • hIcon - хэндл иконки, которую вы хотите поместить в system tray.
  • szTiр - 64-байтовый массив, содержащий строку для использования в качестве всплывающей подсказки к иконке.
  • Вызовите Shell_NotifyIcon, определённую в shell32.inc. Данная функция имеет следующий прототип:

    Shell_NotifyIcon PROTO dwMessage:DWORD, pnid:DWORD

    • dwMessage - это тип сообщения, которое нужно отправить оболочке.
      • NIM_ADD Добавляет иконку в system tray.
      • NIM_DELETE Удаляет иконку из system tray.
      • NIM_MODIFY Изменяет иконку в system tray.
      • рnid - это указатель на коректно заполненную структуру NOTIFYICONDATA.
      • Если вы хотите добавить иконку в system tray, используйте сообщение NIM_ADD, если хотите удалить иконку, применяйте NIM_DELETE.
      • Вот, собственно, и всё. Но чаще всего просто поместить иконку в system tray недостаточно. Вам нужно как-то реагировать на событий мыши, происходящие над этой иконкой. Это можно сделать, обрабатывая сообщение, указанное в поле uCallbackMessage структуры NOTIFYICONDATA. Это сообщение содержит следующие значения в wParam и lParam (отдельное спасибо s__d за эту информацию):




          Содержание  Назад  Вперед