Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

Программируем панель задач Windows 7 (ч.2)

Напечатать страницу
17.06.2009 13:28 | deeper2k

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

Подобную функциональность вы уже могли заметить при использовании Windows 7. Например, подобные кнопки существуют для Windows Media Player. Они позволяют переключать треки, а также останавливать воспроизведение. Всего таких кнопок можно создать не более семи.



Несомненно, такая функциональность может быть полезна не только для Media Player, но и для наших приложений. Давайте посмотрим как можно реализовать это в нашем приложении.

Как я уже говорил, для всех системных функций Windows 7 существует набор библиотек на .NET, который называется .NET Interop Sample Library. Мы пользовались услугами этой библиотеки, когда управляли состоянием прогресс-бара. Сейчас мы вновь воспользуемся этой библиотекой.

Создание наших кнопок должно происходить в момент обработки события WM_TaskbarButtonCreated. Поэтому в форме необходимо переопределить метод WndProc и обрабатывать моменты появления этого события.

protected override void WndProc(ref Message m)
{
    if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)    {
        // initialize buttons   
}
        base.WndProc(ref m);
}


Для инициализации кнопок необходим объект ThumbButtonManager. Этот объект управляет поведением и отображением этих кнопок. Этот объект можно создать, используя метод расширения CreateThumbButtonManager. После этого необходимо воспользоваться методом CreateThumbButton и создать объект кнопки. После того, как все кнопки будут созданы, необходимо добавить их на панель задач при помощи метода AddThumbButtons.

protected override void WndProc(ref Message m)
{
    if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)   
{
        InitializeThumbButtons();   
}
     base.WndProc(ref m);


protected void InitializeThumbButtons()
{
    ThumbButtonManager thumbButtonManager =
         WindowsFormsExtensions.CreateThumbButtonManager(this);

     var decreaseThumbButton = thumbButtonManager.CreateThumbButton(1,
                         Icons.Navigation_First_2, "To reduce the progress");
    decreaseThumbButton.Clicked += delegate
                           {                            // ..
                           };     thumbButtonManager.AddThumbButtons(decreaseThumbButton);
}


Теперь при запуске приложения можно увидеть что появилась одна кнопка управления. Однако, если мы попробуем нажать на нее, то увидим, что обработчик события не срабатывает. Для того, чтобы обработчик начал работать, необходимо в методе WndProc явно передать возможность объекту ThumbButtonManager обрабатывать события.

В итоге получим следующий несложный код:

private ThumbButtonManager _thumbButtonManager;
protected override void WndProc(ref Message m)
{
    if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)
    {
        InitializeThumbButtons();
     }
        if (_thumbButtonManager != null)
        _thumbButtonManager.DispatchMessage(ref m);

      base.WndProc(ref m);
}

protected void InitializeThumbButtons()
{
    if (_thumbButtonManager == null)
    {
        _thumbButtonManager = WindowsFormsExtensions.CreateThumbButtonManager(this);
    }
        var decreaseThumbButton = _thumbButtonManager.CreateThumbButton(1, Icons.Navigation_First_2, "To reduce the progress");    decreaseThumbButton.Clicked += delegate
                       {
                        Progress.Text = (float.Parse(Progress.Text) - 10).ToString();
                        WindowsFormsExtensions.SetTaskbarProgress(this, float.Parse(Progress.Text));
                       };
     // other buttons
     _thumbButtonManager.AddThumbButtons(decreaseThumbButton, normalStateThumbButton, indeterminateStateThumbButton, pauseStateThumbButton, errorStateThumbButton, increaseThumbButton);
}


Это приложение содержит кнопки для управления прогрессом (как и в прошлом случае) и содержит 6 кнопок. Загрузить демо-приложение ThumbButtons можно отсюда.



Sergey Zwezdin, TheVista.Ru Team
Microsoft Most Valuable Professional, Microsoft Regional Director
июнь 2009

Комментарии

Не в сети

спасибо, нужная статейка

17.06.09 13:48
0
Не в сети

+1
по-больше таких статей! Спасибо!

17.06.09 14:35
0
Не в сети

спасибо

18.06.09 01:44
0
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.029 секунд (Общее время SQL: 0.014 секунд - SQL запросов: 57 - Среднее время SQL: 0.00025 секунд))
Top.Mail.Ru