Freigeben über


Coding 4 Fun представляет панель задач Windows 7

Опубликовано 25 августа 2009 в 09:47:00 | Coding4Fun

Если вам понравились новинки Windows 7 — познакомьтесь с новыми возможностями панели задач для создания впечатляющего интерфейса пользователя.

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:

clip_image004

Рис . 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 при наведении указателя на значок свернутого приложения.

clip_image006

Рис . 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 это используется для отображения состояния подключения (отключен, занят, доступен и пр.):

clip_image002[4]

Рис. 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 при копировании файла:

clip_image002[6]

Рис. 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:

clip_image002[8]

Рис. 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, но уже и конечная версия не за горами. Встречайте ее во всеоружии!