Создание Windows-приложений на основе Visual C#

         

Проявление окна


Обычная Windows-форма тоже может быть анимирована, что иногда используется для создания заставки автозагрузочных дисков (рис. 5.4). К сожалению, возможное отсутствие библиотеки .NET Framework на компьютере пользователя делает ненадежным использование такого рода приложений, написанных на C#. Остается надеяться, что выход новой версии – Microsoft Windows Longhorn — изменит ситуацию в лучшую сторону (подробнее о распространении приложений — в лекции 9).


увеличить изображение
Рис. 5.4.  Анимированная форма — заставка автозагрузочного диска

Создайте новое приложение и назовите его AnimatedWindow. Расположите на форме три кнопки и установите следующие свойства формы и кнопок:

Form1, форма, свойствоЗначение
Text Анимация формы
Button1, свойствоЗначение
NamebtnAW_BLEND
Location30; 62
Size232; 23
TextПроявление
Button2, свойствоЗначение
NamebtnHOR_AW_SLIDE
Location30; 118
Size232; 23
TextГоризонтальное появление
Button3, свойствоЗначение
NamebtnCenter_AW_SLIDE
Location30; 182
Size232; 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).




Содержание раздела