Статьи / Программирование / Windows 7 Libraries и API / Программируем панель задач Windows 7 (ч.2)
Программируем панель задач Windows 7 (ч.2)Просмотров: 1461
05.07.2009 19:29
 
Недавно я рассказывал о том, как в 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 можно отсюда.

Источник: www.thevista.ru