Русские документы
Ежедневные компьютерные новости RSS rusdoc.ru  Найти :
• Новости
• Последние поступления
• Книжный магазин
  Hardware:
• Видеоустройства
• Системные платы
• Процессоры
• Мобильные устройства
• Аудиосистема
• Охлаждение системы
• Накопители информации
• КПК и ноутбуки
• Телефоны и связь
• Периферия
• Система
• Сети
• Разные устройства
 
  Programming:
• Web-разработка
• Языки программирования
• Технологии и теория
• Разработка игр
• Программная инженерия
 
  Software:
• Операционные системы
• Windows 7
• Базы данных
• Обзоры программ
• Графика и дизайн
   
  Life:
• Компьютерная жизнь
• Разные материалы
   
• Партнеры
• Публикация
• Правовая информация
• Реклама на сайте
• Обратная связь
• Экспорт в RSS Экспорт в RSS2.0
    Читать в Яндекс.Ленте



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

Раздел: Software / Windows 7 @ 03.06.2009 | Ключевые слова: windows7 разработка taskbar версия для печати

Автор: Sergun
Источник: habrahabr

Windows7 +1Ранее я писал о возможности панели задач Windows 7 изменять preview для окна. Мы говорили о том, что в preview можно отображать как часть окна, так и собственное изображение. У Windows 7 есть такая приятная особенность, что если мы наведем курсор мыши на preview окна, то все остальные окна скроются, а выделенное окно будет отображаться. Выглядит это следующим образом.



Панель задач Windows 7 в этом случае также позволяет нам задать собственное поведение. В этом случае мы имеем возможность задать содержимое нашей формы нашим собственным изображением. Например, там мы можем написать какой-то полезный текст. В этом случае сценарий работы может выглядеть следующим образом. У пользователя в панели задач находится приложение, которое что-то выполняет. Он может отслеживать его состояние на основе ProgressBar и OverlayIcon, о которых я писал ранее. Если этой информации ему недостаточно, он может навести курсор мыши на иконку приложение. В этом случае ему отобразится preview, в котором содержится дополнительная информация (о чем я тоже писал). Пользователь может навести на preview нужного окна и в этом случае все окна скроются и на экране останется только выделенное окно. В этом окне мы можем вывести еще больше информации, которая необходима пользователю.

Вообще, по умолчанию при таком сценарии при скрытии остальных окон выведется само содержимое окна. Переопределение содержания окна в этот момент может быть полезно, если на форме информация разрознена и сразу непонятно что происходит в приложении.

Для того, чтобы реализовать подобный сценарий в нашем приложении мы воспользуемся .NET Interop Sample Library. Для этих целей предназначен метод SetPeekBitmap класса-обертки. Генерировать изображение необходимо в момент времени, когда пользователь наводит на preview окна. Для этих целей переопределим метод WndProc и отловим событие WM_DWMSENDICONICLIVEPREVIEWBITMAP. Как раз в этот момент времени необходимо генерировать изображение.

protected override void WndProc(ref Message m)
{
if (m.Msg == WM_DWMSENDICONICLIVEPREVIEWBITMAP)
{
WindowsFormsExtensions.SetPeekBitmap(this, GeneratePeekBitmap(this, Images._111), true);
}
base.WndProc(ref m);
}


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

private static Bitmap GeneratePeekBitmap(Form form, Image stateImage)
{
var preview = new Bitmap(form.ClientSize.Width, form.ClientSize.Height);
var g = Graphics.FromImage(preview);
g.DrawImage(Images.background.GetThumbnailImage(form.ClientSize.Width, form.ClientSize.Height, null, IntPtr.Zero), 0, 0);
if (stateImage != null)
{
Size thumbSize = new Size(100, 100);
g.DrawImage(stateImage.GetThumbnailImage(thumbSize.Width, thumbSize.Height, null, IntPtr.Zero), form.ClientSize.Width / 2 - thumbSize.Width / 2, form.ClientSize.Height / 2 - thumbSize.Height / 2);
}
return preview;
}


Обратите внимание, что для корректного отображения размеры этого изображения должны совпадать с размером формы. После этого у нас получится приложение, которое выглядит следующим образом.



На самом деле, после это изображение можно устанавливать откуда угодно. Главное, чтобы это изображение также генерировалось в момент обработки указанного выше события. Например, в демонстрационном приложении я также устанавливаю это изображение в таймере. Таким образом я могу навести курсор мыши на preview и наблюдать за тем как изменяется сама форма при срабатывании таймера.

Кроме того, у метода SetPeekBitmap существует третий параметр логического типа (boolean). Изменяя этот параметр можно указать нужно ли убирать рамку приложения, когда осуществляется подобный просмотр. Например, если я установлю этот параметр в false, то увижу следующий результат.



Демонстрационное приложение:
Taskbar-PeekBitmap.zip

Это интересно:








версия для печатиРаспечатать статью


Вернуться в раздел: Software / Windows 7


Реклама:
Читать наc на:

Add to Google
Читать в Яндекс.Ленте






Rambler's Top100
© Copyright 1998-2012 Александр Томов. All rights reserved.