Пользователь
0,0
рейтинг
22 мая 2009 в 14:50

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

На этот раз мы поговорим о другой особенности панели задачи Windows 7 – OverlayIcon. Эта возможность исключительно полезна для приложений, которые обладают каким-то состоянием с точки зрения пользователя.

К таким приложениям можно отнести программы для обмена мгновенными сообщениями (IM). Например, Windows Live Messanger активно использует эту возможность. Например, если мы откроем WLM и будем изменять состояние, то можно увидеть как оно отображается на панели задач.





Такая функциональность может быть полезна для множества приложений. К счастью реализовать ее не так сложно. Как и в предыдущих примерах мы воспользуемся библиотекой .NET Interop Sample Library.

Чтобы добавить иконку состояния к основному значку приложения, необходимо добавить файл ресурсов в проект и разместить там нужные иконки. Также, мы можем получить объекты Icon из другого места, если это необходимо.


Теперь все, что необходимо сделать – это воспользоваться методами расширения, позволяющими задавать иконки для нашего приложения. Для этих целей определен метод SetTaskbarOverlayIcon. Мы должны передать ему в параметрах нашу форму, иконку и описание. Т.о., установка новой иконки из кода будет выглядеть следующим образом.

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

Также мы можем удалить этот значок. Для этого необходимо передать значение null вместо самой иконки.

WindowsFormsExtensions.SetTaskbarOverlayIcon(this, null, String.Empty);

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



При нажатии на каждую из кнопок переключается состояние, которое отображается в панели задач.






Демонстрационное приложение:
Taskbar-Icons.zip
Сергей Звездин @Sergun
карма
72,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (48)

  • –2
    Интересно… вот разработчики только ради Win7 будут заморачиваться? А в следующей версии Windows останется этот таскбар?
    • +11
      Windows XP была выпущена 25 октября 2001 года. Это я к тому, что если семерка будет использоваться еще лет 8, то наверное стоит позамарачиваться.
      • +2
        Забудьте. Вам майкрософт неясно объяснила? Промежутки между выпуском ОС будут сокращаться, и новая версия Windows будет выходить каждый год-два!
        • +1
          Но думаю, не будет сильно отличатся в плане обратной совместимости, виста была воспринята не очень, но она была не обходами для перехода.

          Так что думаю такой таксбар куда лучше прежнего, плюс очевидно. что как и в мак ос, удобно видеть на значке например количество принятых писем и пр.
          • –9
            > удобно видеть на значке например количество принятых писем и пр.
            Вы статью читали? Каким образом? Заготавливать для программы иконки с циферками 1,2,3,...,10000000,...?))
            • +8
              Мне кажется ничего не помешает сгенерировать иконку динамически)
              • –6
                Была бы она векторной, «как и в мак ос», это было бы действительно просто, а так, я сомневаюсь, что кто-то кроме майкрософт будет этим заморачиваться.
                • +6
                  Растр не так сложно генерировать как может показаться ))

                  Например в Win XP многие приложения (напр. Process Explorer) динамически генерируют иконку и отображают ее в трее, что сложного в том чтобы проделать тоже самое с таскбаром? )
                  • –11
                    Вы уверены, что та иконка (и графиком загруженности) действительно генерируется автоматически, а не используются сделанные заранее иконки?

                    Если растр так легко генерировать, как вы говорите, то чего же загрузчик Вин 7 не генерирует, а выводит готовые (паршивого качества по бокам причем) изображения из спарйтов?
                    • 0
                      что почему и как у загрузчика не знаю, но сгенерировать растр никогда проблемой не было.
                    • +3
                      >Вы уверены, что та иконка (и графиком загруженности) >действительно генерируется автоматически, а не >используются сделанные заранее иконки?

                      Уверен.

                      Для каждой конкретной задачи — конкретная реализация.
                      Задача PE отображать динамическую информацию в иконке.

                      Задача загрузчика, показать красивую анимацию для юзера (с минимальной затратой проц. времени), загружая при этом систему.
                    • +7
                      > Вы уверены, что та иконка (и графиком загруженности) действительно генерируется автоматически, а не используются сделанные заранее иконки?

                      Я тут прикинул: количество иконок необходимое для отображения всех состояний Process Explorer в трее должно быть не меньше чем 10078751602022313874633200 штук. Если иконка 16х16 весит 0,5 Кб, то дистрибутив PE даже с учётом сжатия UPX занимал бы приблизительно 1511812740303347 Тб.

                      Но Руссинович, при создании своей программы понимал, что даже Гугль не сможет захостить дистрибутив такого размера, поэтому, отбросив в сторону mspaint, он отыскал в книжке «С++ для начинающих» 3 примера: 1) как создать произвольный bitmap, 2) как из bitmap сделать icon и 3) как созданный icon поместить в tray. Вот, собственно говоря, и сказочке конец.

                      > Если растр так легко генерировать, как вы говорите, то чего же загрузчик Вин 7 не генерирует, а выводит готовые (паршивого качества по бокам причем) изображения из спарйтов?

                      Зачем занимать процессор генерацией никому не нужных изображений при загрузке системы? Чтобы она грузилась подольше? Советую изучить на досуге как люди работают: www.thevista.ru/page.php?id=10871 (там и про производительность тоже есть)
          • 0
            согласен! Сейчас можно висту обновить на win7 без перестановки програм. Слышал, что и совместимость драйвером поддерживается. Т.е. для частых выходом версий виндоус Майкософт хорошо подготавливается:)
        • НЛО прилетело и опубликовало эту надпись здесь
    • +2
      За то время, пока появится новая ОС от microsoft эта вещь будет полезна. А если разработчики не хотят заморачиваться, то пускай идут вагоны разгружать.
    • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Жаль что кроме Windows Live Messanger больше нигде пока не реализовано. Хотелось бы такой плагин для Миранды или Пиджина.
    • +3
      В миранде будет реализовано в стандартной поставке скоро =)
      • 0
        а это появится? :)
        • 0
          Нет )
      • 0
        Очень приятно слышать, спасибо!
    • 0
      Ага. А еще если список контактов реализовать как jumplist — представляете, как удобно было бы? :)
  • +2
    Не понимаю откуда столько критики? Вещь то полезная. Да я юзаю ХР, да я ненавижу Висту. Но даже многие знакомые Линуксоиды неплохо отзываются о 7-ке… и знаете, я всетаки переборю свою старомодность и попробую что оно такое… Темболие зная агитационную политику Микрософта, вскоре ювзеры будут использовать таки 7-ку чаще чем ХР, а почему? Да потому что есть такие которые глючную Висту по дефолту себе ставят…

    Автор, любой опыт — ценен и может пригодится, пиши еще.
    • –1
      Зачем ставить глючную висту, когда можно поставить нормальную?
      • 0
        Это Вы у меня спрашиваете? Я же писал: «Да я юзаю ХР, да я ненавижу Висту.»
        Я говорю к тому, что если какая то тетенька купила скажем ноут с вистой, то она врятли побежит ее менять на ХР, она точно так же не умеет работать как с вистой так и с хр, ей вообще пофигу. Так вот я и высказал свое мнение, что таких пользователей слишком много, что бы забивать на них и не кодить под эти платформы (виста, виндоус 7).

        Вы, наверное, совсем не поняли моей реплики, еще и заминусовали меня, я так понял, нехорошо.
        • +2
          >«Да я юзаю ХР, да я ненавижу Висту.»
          В основном такая ситуация с теми, кто слишком сильно подвержен влиянию общественного мнения. Кто-то подёргал ниточки и вот процентов 90 тех, кто ставит ХР вместо висты делает это потому, что «брату друга кто-то сказал, что виста это плохо»

          >еще и заминусовали меня, я так понял
          С моей-то кармой? Ну-ну. А вот Вы, похоже, не упустили случая…
          • 0
            Уважаемый, Вы не правы опять таки:

            1. Виндовс виста ультиматум у меня стояла 3 недели, еще до ее офф релиза и я вам скажу — полнейшая гадость. Про что я и писал, я НИКОГДА не буду распростронять слух о том, что какой то продукт «плохой» если я его сам не попробую. Потому и сижу на ХР. (Правда стоит у меня еще и Сюзя, но юзаю ее редко). В первоначальном своем коменте я защищал автора перед возгласами тех, кто кричал, что его технология никому не надо, так как семерка никому не пригодится, посему ваше замичание совсем некоректно.

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

            Извольте откланятся…
            • 0
              у меня стояла 3 недели, еще до ее офф релиза

              Т. е. вы поставили неофициальную версию, до её выхода в свет, потрогали, и решили, что она глючная? О_О

              Может в следуюший раз попробуете дождаться релиза, купить и только тогда говорить о «глючности»? Никаких проблем у меня, линуксиста, с Вистой нету, всё работает качественно, падает реже, чем Убунту.
  • 0
    Вау, не знал про эту фишку, спасибо за статью! П.С. У вас случаем блога своего нету, почитать? =)
    • 0
      в профиле указан :)
  • +1
    все, решено. на выходных ставлю 7-ку и уж заодно VS 2010)
    • 0
      вот только 5-й Решарпер до EAP дорастат только в июне, и то не понятно в какой его части :(
  • 0
    Прошу не кидать камнями, но в Мак ОС это удобнее реализовано для разработчика. Вместо назначения значков дока можно использовать отдельный «view» для дока, в котором можно рисовать и анимировать как угодно. Здесь же на разработчика возлагается рутинная задача создания значков на лету для каждого кадра. Скорее на хак похоже и рассчитано на статичную графику.
    • +1
      Вот когда ваш Мак ОС откроют не только для расового яблочного железа, тогда и можно будет говорить о какой-то конкуренции.
      • 0
        А про конкуренцию не слова не было. Было про то что в Мак ОСи лучше сделано, вот и все.

        Я вот был, кстати, не в курсе, но отдельный «view» для дока — действительно отличная идея, так ведь?
      • 0
        При чем тут конкуренция? Я про реализацию API.
        В МакОС разработчик говорит ОС, что хочет чтобы вместо значка программы в доке отображался некий «view». ОС по мере надобности задает размер этого «view» и все что надо делать разработчику — туда рисовать и после этого сообщать ОС, что вид обновился. При этом «view» еще и контейнер и может включать дочерние объекты. Например рисовать картинку, а поверх шлепнуть стандартный прогресс бар.

        Скорее всего прогресс загрузки в IE8 рисуется каким-то подобным образом, а не созданием иконок.
        • +1
          >Скорее всего прогресс загрузки в IE8 рисуется каким-то подобным образом, а не созданием иконок.
          Для прогресс-бара — отдельная функция.

          >вместо значка программы в доке отображался некий «view».
          Гибко. Но у меня подозрение, что MS намеренно ограничивает такие возможности. Например, в той же семёрке были бы проблемы с цветной подсветкой, которую приходилось бы пересчитывать.
    • +3
      Да да… на Мас ОС все круче, и с иконками работать проще и трава зеленее и SDK платные :)))

      PS: А вообще вы просто не поняли смысл OverlayIcon.

      OverlayIcon — отображает состояние программы.!!! Статическое состояние программы!!..

      Например Windows Live Mail — есть новая почта, нет новой почты. Мне не нужна прыгающая и скачущая иконка. Захочу, сам посмотрю на иконку.

      Ненужно лишний раз отвлекать внимание пользователя! Так что MS в данном конкретном случаи поступили очень грамотно.
  • +4
    7 — по крайней мере текущий билд 7100 — это редкий случай работающей ОС от Microsoft. Это не виста! Но зато под 7 идет весь софт, который идет под вистой, ибо ядро у нее 6.1 (разница как между 2000 и XP). Юзаю уже 2 недели, до сих пор проблем не обнаружено. Зарегился на бета-тестирование. Это конечно обычная рекламная акция — дать всем желающим почти год поюзать лицензию, чтобы потом они ее купили. Но такую ось можно и купить, это не убожище по прозвищу ME 2.0. И офис 2010 по сравнению с 2007 — три шага вперед (цвет фона, переделанная уродская кнопка и полная настройка риббона). M$ исправляется?
    • 0
      кстати, про купить. есть информация о возможности апгрейда с Vista на семерку и вероятных ценах? или прийдется брать «с нуля»? где бы почитать от этом?..
      • 0
        Microsoft рекомендует прямой переход на Windows 7

        viennaos.net/articles/1059-microsoft-rekomenduet-pryamoj-perexod-na-windows-7.html

        На данный момент многочисленные фирмы еще не успели перейти на Windows Vista. По сему Билл Вегт (Bill Veghte) советует прямой переход с Windows XP на Windows 7.

        В своем выступлении на конференции TechEd он заявил, что предприятия должны отвергнуть все планы по переходу на Windows Vista, хорошенько проанализировать ситуацию и сделать выводы. «Если вы хотите испытать на своих компьютерах Windows Vista, то я вам советую выбрать Windows 7 Release Candidate и продолжить знакомство с новой системой именно на этой сборке.», так же в своей речи он упомянул, что финальная версия семерки ожидается к рождественским праздникам.

        Также многие аналитики сходятся в одном, переход для больших предприятий непосредственно на Windows 7 будет более целесообразным.Видимо, боятся крупных клиентов потерять, которые еще не распуганы вистой.
        • 0
          (последнее предложение — это мой коммент)
      • 0
        возможность точно будет.
  • +1
    Отличная серия статей. Спасибо. =)
  • 0
    К сожалению, описанный метод не работает, если в настройках таскбара выбраны мелкие иконки. А хотелось бы.
    • 0
      к сожалению так оно и есть
      видимо это сделано из-за того, что OverlayIcon просто будет невидно при использовании этого режима
  • 0
    Отличная статья!

    Однако кроме смены иконки, в Windows 7 существует еще несколько функций панели задач.

    Например, наглядный progress-bar (как у Internet Explorer):

    Или целый всплывающий интерфейс (на примере Windows Media Player):

    При клике правой кнопкой мыши появляется вот такое замечательное меню (уникальное для каждого приложения):
    • +2
      Про progress bar и thumbbuttons я уже писал ранее. Про остальное — в ближайшем будущем.

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