Программируем Windows 7: Taskbar. Часть 4 – Custom OverlayIcon

Ранее я писал о том, как можно добавить значок состояния для вашего приложения в панели задач Windows 7. Мы рассматривали статические изображения для этих целей. Напомню, что для этого мы использовали метод SetTaskbarOverlayIcon, в параметрах которого передается ссылка на Icon.

Однако, один из читателей блога предложил другой сценарий, в котором на месте дополнительной иконки отображается какая-то информация. К примеру, это может быть текущая скорость закачки, если ваше ПО что-то загружает по сети. Либо это может быть количество новых писем в почтовом ящике, если это почтовый клиент. Примеров можно много привести.

Напомню, что для того, чтобы задать статическое изображение необходимо выполнить следующий код.

WindowsFormsExtensions.SetTaskbarOverlayIcon(this, Icons.Error, "Error");

В качестве второго параметра здесь передается объект Icon. Однако кто нам мешает генерировать этот объект динамически? Давайте воспользуемся нехитрым кодом и сделаем это. Я создам метод, который будет генерировать такое изображение и покажу эту иконку.

private static Icon BuildIcon(int param)
{
    Bitmap image = Icons.BLANK2334242;
    Graphics.FromImage(image).DrawString(param.ToString(@"D2"), new Font("Arial", 54), Brushes.White, 10, 25);
    return Icon.FromHandle(image.GetHicon());
}

private void ShowStatus(object sender, EventArgs e)
{
    WindowsFormsExtensions.SetTaskbarOverlayIcon(this, BuildIcon(50, "Status");
}

Таким образом, при помощи метода BuildIcon будет сгенерирована новая иконка, которая будет отображена на панели задач.

На данном скриншоте хорошо видно, что к стандартному значку мы добавили текст и отобразили это на панели задач.

В демонстрационном приложении я создал таймер, который имитирует работу менеджера загрузки, выдавая постоянно разную "скорость" закачки.