Windows forms как сделать анимацию
Блог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
Читайте также: