Coding 4 Fun представляет панель задач Windows 7
Опубликовано 25 августа 2009 в 09:47:00 | Coding4Fun
Если вам понравились новинки Windows 7 — познакомьтесь с новыми возможностями панели задач для создания впечатляющего интерфейса пользователя.
Эйриен Т. Калп (Arian T. Kulp)
https://www.ariankulp.com (EN)
· Сайт проекта: Codeplex (EN)
· Исходный текст и скомпилированные модули: загрузить (EN).
· Сложность: средняя
· Необходимое время : 3 часа
· Затраты: бесплатно
· НеобходимоеПО : Visual Basic или Visual C# Express, Windows API Code Pack, Windows 7 (RC или более поздняя версия)
Введение
В Windows 7 много новых возможностей, которые будут доступны разработчикам с момента выпуска системы. Это нововведения, которые сделают работу с приложениями удобней. Одна из усовершенствованных областей — это панель задач. С ее помощью всегда было легко наблюдать работающие программы и переключаться между ними. В Vista мы получили возможность предварительного просмотра и другие функции. Теперь же, в Windows 7, мы можем перетаскивать значки задач, изменяя их порядок, прикреплять их к панели, чтобы они там оставались, даже когда не исполняются (замена функции быстрого запуска). Можно также разворачивать или закрывать окно, щелкнув правой кнопкой значок. Еще более интересное свойство: в контекстном меню при щелчке правой кнопкой можно представить такую полезную информацию, как список последних файлов или возможных действий, например чтобы изменить свой статус в Live Messenger:
Рис . 1: Списокдля Windows Live Messenger
В данной статье я хочу рассмотреть следующие новые функции:
· настраиваемый просмотр;
· перекрытие значков;
· индикация ходы выполнения;
· кнопки панели инструментов.
Работу со всеми этими функциями упрощает Windows API Code Pack (EN). MSDN Code Gallery — бесплатный, но не обеспеченный техподдержкой пакет от Microsoft. Версия 1.0 вышла 6 августа после серии предварительных выпусков. Поскольку многие функции относятся лишь к Windows 7, они не включены в библиотеку базовых классов .NET. Данный пакет обеспечивает их взаимодействие с .NET, так что вам не потребуется создание собственных интерфейсов.
Данный пример написан для Windows Forms, но аналогично можно работать и с WPF. Представленные четыре функции легко включить в любое собственное приложение.
Настраиваемый просмотр
Для начала рассмотрим настраиваемый просмотр. Речь идет о возможности замены режима просмотра Aero Peek при наведении указателя на значок свернутого приложения.
Рис . 2. Просмотр Aero Peek для Windows Live Writer
Если вы напишите простое приложение и запустите его (F5), просмотр в панели задач отобразит точную копию главного окна этого приложения. Нужная информация обеспечивается диспетчером рабочего стола (Desktop Window Manager, DWM). Используется сохраненное в кэше изображение. Заменить же его несложно. В какой-либо программе редактирования изображений можно сделать желаемое изображение без панели инструментов и меню. Или взять кэшированный в DWM эскиз и убрать из этого изображение все лишнее, например, ленту вверху окна.
Класс TaskbarManager отвечает за отображение хода выполнения, эскизов, перекрытие значков и других подобных вещей. Если бы не Windows API Code Pack, все эти функции пришлось бы выискивать в многочисленных Win32 API. Сначала надо получить статическую ссылку на него:
VisualBasic
1: Private windowsTaskbar As TaskbarManager = TaskbarManager.Instance
Visual C#
1: private TaskbarManager windowsTaskbar = TaskbarManager.Instance;
Эта ссылка будет применяться в вашем приложении при всех манипуляциях с панелью задач. Чтобы заключить изображение в некоторую область, нужно указать описатель окна и регион. Например, можно определить свойства Location и Sizeкакого-либо элемента управления. В нашем примере это GroupBox, но в других приложениях более подходящим может быть PictureBox или другой компонент:
Visual Basic
1: windowsTaskbar.TabbedThumbnail.SetThumbnailClip(Me.Handle, New Rectangle(groupBox2.Location, groupBox2.Size))
Visual C#
1: windowsTaskbar.TabbedThumbnail.SetThumbnailClip(this.Handle, new Rectangle(groupBox2.Location, groupBox2.Size));
Перекрытие значков
Перекрытие значков позволяет визуально представлять состояния программы. Аналогичное назначение имеют значки в области уведомлений (индикатор зарядки аккумулятора, состояние антивируса), но теперь подобные вещи с помощью значков панели задач не реализуемы. Теперь вы можете выбрать любой значок (из ICO-файла или путем извлечения из DLL) и диспетчер панели задач будет отображать его непосредственно на панели задач, накладывая на значок вашего приложения. В Windows Live Messenger это используется для отображения состояния подключения (отключен, занят, доступен и пр.):
Рис. 3. WindowsLiveMessengerс перекрытием, показывающим отключенное состояние
Очень удобная вещь для вывода кратких сведений, особенно учитывая, что все больше пользователей стремятся спрятать значки панели уведомления, так что их никогда не видно.
Прелесть в том, что класс TaskbarManager позволяет установить это одной строкой кода:
Visual Basic
1: windowsTaskbar.SetOverlayIcon(me.Handle, My.Resources.Green, "Green")
Visual C#
1: windowsTaskbar.SetOverlayIcon(this.Handle, TaskbarDemo.Properties.Resources.Green, "Green");
Тот же вызов API позволяет очистить перекрытие:
Visual Basic
1: windowsTaskbar.SetOverlayIcon(Me.Handle, Nothing, Nothing)
Visual C#
1: windowsTaskbar.SetOverlayIcon(this.Handle, null, null);
Индикация ходы выполнения
Для наглядного представления таких процессов, как копирование или загрузка файла применяют индикаторы хода выполнения во всплывающих окнах. Особым цинизмом является использование для этого модальных окон! Однако в прекрасном новом мире Windows 7 мы можем не утомлять наших пользователей подобными вещами. Вместо того, чтобы перегружать экран, мы можем отобразить ход любого процесса, отобразив индикатор хода выполнения за значком соответствующего приложения в панели задач, как это сделано для Проводника Windows при копировании файла:
Рис. 4. Проводник Windowsс индикатором хода копирования файла
Индикатор не очень отчетливо виден за папкой. Вы указываете несколько состояний, которые должен отображать индикатор, а затем предоставляете значения, определяющие ход выполнения.
В данном простом приложении мы отображаем значения перечисления TaskbarProgressBarStateв ComboBox:
Visual Basic
1: comboBoxProgressState.DataSource = System.Enum.GetNames(GetType(TaskbarProgressBarState))
Visual C#
1: comboBoxProgressState.DataSource = Enum.GetNames(typeof(TaskbarProgressBarState));
В моменты изменений мы изменяем состояние вызовом SetProgressState:
Visual Basic
1: windowsTaskbar.SetProgressState(CType(System.Enum.Parse(GetType(TaskbarProgressBarState), comboBoxProgressState.Text), TaskbarProgressBarState))
Visual C#
1: windowsTaskbar.SetProgressState((TaskbarProgressBarState)Enum.Parse(typeof(TaskbarProgressBarState), comboBoxProgressState.Text));
Затем с помощью TrackerBar выбираем текущее выводимое значение вызовом SetProgressState:
Visual Basic
1: windowsTaskbar.SetProgressValue(trackProgress.Value, 100)
Visual C#
1: windowsTaskbar.SetProgressValue(trackProgress.Value, 100);
Кнопки панели инструментов
Одна из новых функций, которая меня действительно сильно порадовала, это возможность добавлять кнопки к просматриваемому изображению. Это явно недооцененная функция; вот как ее реализация выглядит в Windows Media Player:
Рис. 5. Просмотр WindowsMediaPlayerс кнопками управления плеером
Видите кнопки Pause, Previous и Next над Aero Peek? Они реально работают. Вы можете легко добавлять кнопки в свое приложение и привязывать к ним обработчики событий как к любым другим кнопкам. Привязка событий невозможна в дизайнере, как для кнопок форм и меню, но это и не требуется.
Начнем с объявления ThumbnailToolbarButton:
Visual Basic
1: Private WithEvents buttonFirst As ThumbnailToolbarButton
Visual C#
1: private ThumbnailToolbarButton buttonFirst;
Вы можете задать изображение, метку и другие свойства Button. Я создал кнопку, задав для нее картинку, хранящуюся в ресурсе, и метку:
Visual Basic
1: buttonFirst = New ThumbnailToolbarButton(My.Resources.search, "Search")
Visual C#
Теперь к ней надо привязать обработчик события. В Visual Basic вы можете в объявлении обработчика событий использовать ключевое слово Handles, поскольку buttonFirstбыла объявлена с использованием WithEvents. В C# вы можете ввести "buttonFirst.Click +=" и дважды нажать клавишу TAB. В результате строка будет закончена и будет создана заглушка для обработчика:
Visual Basic
1: Private Sub buttonFirst_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs) Handles buttonFirst.Click
Visual C#
1: buttonFirst.Click += new EventHandler<ThumbnailButtonClickedEventArgs>(buttonFirst_Click);
В завершении добавим кнопки, используя экземпляр TaskbarManager. AddButtons принимает список параметров, так что можно добавить и другие кнопки через запятую:
Visual Basic
1: windowsTaskbar.ThumbnailToolbars.AddButtons(Me.Handle, buttonFirst)
Visual C#
1: windowsTaskbar.ThumbnailToolbars.AddButtons(this.Handle, buttonFirst);
Добавьте что-нибудь в тело обработчика события (простой MessageBox в нашем примере) и готово! Суперпростая возможность добавить новое измерение в интерфейс приложения! Это альтернатива меню команд для значка программы в области уведомлений и простой способ вызова основных функций программы. Не в каждом приложении эта возможность нужна, но там, где она полезна, добавить ее не составит труда.
Последующие шаги
Дальше вам предстоит понять, что добавить к собственному приложению. Если нестандартный просмотр и кнопки на панели инструментов применимы не в каждом приложении, индикатор хода выполнения и перекрытие значков можно применять почти везде. Конечно, нельзя забывать, что все эти функции не будут видны в Windows Vista и более ранних версиях системы. Так что надо предусмотреть альтернативный способ доступа к тем же функциям. Кнопки панели инструментов и перекрытие значков можно реализовать в значке панели уведомлений, а индикатор хода выполнения реализуется во всплывающем окне.
Завершение
Создавать удобные для пользователя приложения в Windows 7 очень просто. Вы можете переделать существующие приложения, добавив новые возможности, и должны помнить о них при разработке новых. Совсем скоро все эти возможности станут обычным делом и ваши приложения не должны отставать от других.
Загрузите Visual Studio 2008 Express Edition, если у вас ее еще нет (Visual Basic или Visual C#), а затем Windows API Code Pack, и можете приступать! Разумеется, для отладки описанных функций вам потребуется Windows 7 RC, но уже и конечная версия не за горами. Встречайте ее во всеоружии!