Проявление окна
Обычная Windows-форма тоже может быть анимирована, что иногда используется для создания заставки автозагрузочных дисков (рис. 5.4). К сожалению, возможное отсутствие библиотеки .NET Framework на компьютере пользователя делает ненадежным использование такого рода приложений, написанных на C#. Остается надеяться, что выход новой версии – Microsoft Windows Longhorn — изменит ситуацию в лучшую сторону (подробнее о распространении приложений — в лекции 9).
увеличить изображение
Рис. 5.4. Анимированная форма — заставка автозагрузочного диска
Создайте новое приложение и назовите его AnimatedWindow. Расположите на форме три кнопки и установите следующие свойства формы и кнопок:
Text | Анимация формы |
Name | btnAW_BLEND |
Location | 30; 62 |
Size | 232; 23 |
Text | Проявление |
Name | btnHOR_AW_SLIDE |
Location | 30; 118 |
Size | 232; 23 |
Text | Горизонтальное появление |
Name | btnCenter_AW_SLIDE |
Location | 30; 182 |
Size | 232; 23 |
Text | Появление из центра |
Добавляем класс WinAPIClass:
Листинг 5.6.
(html, txt)
Создаем обработчики кнопок:
Листинг 5.7.
(html, txt)
При запуске приложения доступны три вида анимации (рис. 5.5). Добавьте кнопок на форму и попробуйте вызвать другие эффекты перечисления AnimateWindowFlags.
увеличить изображение
Рис. 5.5. Анимация формы. А — готовое приложение, Б — проявление (изменение прозрачности), В — горизонтальное появление справа, Г — появление из центра (расширение)
На языке С метод в обработчике будет выглядеть следующим образом:
BOOL AnimateWindow(HWND hwnd, DWORD dwTime, DWORD dwFlags);
На диске, прилагаемом к книге, вы найдете приложение AnimatedWindow (Code\Glava5\ AnimatedWindow).
/// <summary> /// Анимация окна. /// </summary> /// <param name="ctrl">Окно.</param> /// <param name="dwTime">Время.</param> /// <param name="Flags">Флаги.</param> /// <returns></returns> public static bool AnimateWindow(Control ctrl,int dwTime, AnimateWindowFlags Flags) { return AnimateWindow(ctrl.Handle,dwTime,(int)Flags); } #endregion } }
Листинг 5.6.
Создаем обработчики кнопок:
private void btnAW_BLEND_Click(object sender, System.EventArgs e) {
// Скрываем окно this.Hide(); // Запускаем анимацию. Второй параметр в скобках — время анимации в миллисекундах. WinAPIClass.AnimateWindow(this, 3000, WinAPIClass.AnimateWindowFlags.AW_ACTIVATE|WinAPIClass.AnimateWindowFlags.AW_BLEND); // Отображаем кнопки после анимации this.btnAW_BLEND.Invalidate(); this.btnHOR_AW_SLIDE.Invalidate(); this.btnCenter_AW_SLIDE.Invalidate();
}
private void btnHOR_AW_SLIDE_Click(object sender, System.EventArgs e) {
this.Hide(); WinAPIClass.AnimateWindow(this, 3000, WinAPIClass.AnimateWindowFlags.AW_HOR_POSITIVE|WinAPIClass.AnimateWindowFlags.AW_SLIDE); this.btnAW_BLEND.Invalidate(); this.btnHOR_AW_SLIDE.Invalidate(); this.btnCenter_AW_SLIDE.Invalidate(); }
private void btnCenter_AW_SLIDE_Click(object sender, System.EventArgs e) { this.Hide(); WinAPIClass.AnimateWindow(this, 3000, WinAPIClass.AnimateWindowFlags.AW_CENTER|WinAPIClass.AnimateWindowFlags.AW_SLIDE); this.btnAW_BLEND.Invalidate(); this.btnHOR_AW_SLIDE.Invalidate(); this.btnCenter_AW_SLIDE.Invalidate();
}
Листинг 5.7.
При запуске приложения доступны три вида анимации (рис. 5.5). Добавьте кнопок на форму и попробуйте вызвать другие эффекты перечисления AnimateWindowFlags.
увеличить изображение
Рис. 5.5. Анимация формы. А — готовое приложение, Б — проявление (изменение прозрачности), В — горизонтальное появление справа, Г — появление из центра (расширение)
На языке С метод в обработчике будет выглядеть следующим образом:
BOOL AnimateWindow(HWND hwnd, DWORD dwTime, DWORD dwFlags);
На диске, прилагаемом к книге, вы найдете приложение AnimatedWindow (Code\Glava5\ AnimatedWindow).