Windows forms как сделать анимацию

Обновлено: 05.07.2024

БлогNot. Visual C++: добавляем в приложение немного анимации

Visual C++: добавляем в приложение немного анимации

1. Картинка следует за курсором мыши

Создав решение Windows Forms на C++, поместим в папку ИмяРешения/Debug подходящую картинку (в коде предполагается имя файла butterfly.jpg , фон картинки прозрачный, прикреплена внизу страницы).

Опишем в классе формы необходимые объекты:

Дадим им начальные значения в конструкторе формы, после оператора InitializeComponent() :

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

А вот и сам этот метод, добавленный в класс формы:

Метод MoveImg мы также напишем сами, он будет просто менять координаты, предназначенные для левого верхнего угла картинки:

Кто будет непосредственно заниматься отрисовкой? Конечно, обработчик события Paint , который мы создадим из стандартного окна Свойства:

По событию MouseDown (нажатию кнопки мыши) будем переключать режим движения картинки, то есть, кликнем раз - движение за курсором прекратится, а следующий клик возобновит движение и т.д.

Наконец, обработчик события перемещения мыши будет следить за тем, куда нужно смещаться картинке. Обратите внимание на замечание о том, какой должна быть цель движения, чтобы картинка останавливалась "прямо под курсором".

Это всё, приложение можно собирать.

2. Картинка двигается по форме нажатием клавиш со стрелками

Начнём как и в прошлый раз, в пустом проекте Windows Forms к классу формы добавлены следующие свойства:

В конструкторе формы они проинициализированы после стандартного вызова InitializeComponent() :

Картинка расположена так же, как в пункте 1.

После загрузки формы точно так же создаётся таймер и программно назначается обработчик его события:

На отрисовку теперь будем менять координаты картинки и затем уже обновлять форму:

По нажатию клавиш со стрелками будем запоминать, что нажато, в свойстве keyCode , чтобы при следующей отрисовке поменять координаты картинки на экране:

3. Анимация на основе ImageList и таймера

Теперь это выполнится совсем просто. Опишем в классе формы данные:

Положим в папку Debug проекта (при выборе конфигурации решения, равной Debug) картинки с именами 1.jpg , . 6.jpg , обозначающие фазы движения (прикреплены внизу), и запрограммируем событие загрузки формы:

Теперь всё, что нам понадобится - выводить новую картинку по событию таймера:

4. Движение картинки мышью

Так как у Image нет свойства Location , будем перемещать добавленный на форму PictureBox . Ему автоматически присвоится имя pictureBox1 .

Опишем в классе формы необходимые данные:

В конструкторе формы создадим и настроим соответствующий объект (код после вызова метода InitializeComponent() ):

Для перемещения объекта мышью понадобится совместная обработка нескольких событий от мыши для компоненты pictureBox1 .

По нажатию кнопки мыши будем включать режим перетаскивания картинки, а по отпусканию - выключать:

Обработчик события MouseMove выполнит основную работу:

"Допуск" в 5 пикселов позволяет картинке быть не слишком чувствительной к смещению мыши.

Аналогично можно реализовать перетаскивание группы объектов, например, поместив их в контейнер System::Collections::Generic::List и программно назначив всем картинкам списка одни и те же обработчики событий мыши (см. пример программного назначения события для таймера). Обработчики событий смогут различать, от какой именно картинки "пришло" событие, например, с помощью следующего кода:

Файл butterfly.jpg для примеров 1-2, 4


Файл butterfly.jpg для примеров 1-2, 4

Читайте также: