Вы можете рисовать в синхронизированных интервалах, создавая таймер при помощи функции SetTimer. При помощи использования таймера, равномерно отправляя сообщения WM_TIMER оконной процедуре, приложение может выполнить простую анимацию в рабочей области наряду с тем, что другое приложение продолжает "выполняется".
В примере ниже, приложение заставляет звезду в рабочей области прыгать из стороны в сторону. Каждый раз, когда оконная процедура получает сообщение WM_TIMER, процедура стирает звезду в текущей позиции, вычисляет новую позицию и рисует звезду внутри новой позиции. Процедура запускает таймер при помощи вызова функции SetTimer, в ходе обработки сообщения WM_CREATE.
|
Это приложение использует частный контекст устройства, чтобы минимизировать время, требуемое для подготовки контекста устройства к рисованию. Оконная процедура извлекает и инициализирует частный контекст устройства, обрабатывая сообщение WM_CREATE, устанавливая рабочий режим бинарного растра, давая возможность тому, чтобы звезда стиралась и рисовалась используя один и тот же вызов функции Polyline. Оконная процедура также устанавливает точку, являющуюся началом координат давать возможность звезде рисоваться, используя тот же самый набор точек независимо от позиции звезды в рабочей области.
Приложение использует сообщение WM_PAINT, чтобы рисовать звезду всякий раз, когда окно должно обновиться. Оконная процедура рисует звезду только тогда, если, она не видима; то есть, только тогда, если она была стерта в соответствии с сообщением WM_ERASEBKGND. Оконная процедура перехватывает сообщение WM_ERASEBKGND, чтобы установить переменную fVisible, но передает сообщение в функцию DefWindowProc для того, чтобы система смогла рисовать фон окна.
Приложение использует сообщение WM_SIZE, чтобы остановить таймер, когда окно свернуто и повторно запустить таймер, когда свернутое окно восстановлено. Оконная процедура также использует это сообщение, чтобы обновить текущую позицию звезды, если размер окна был уменьшен вследствие чего звезда больше не находится в рабочей области. Приложение отслеживает текущую позицию звезды при помощи использования структуры, указанной переменной rcCurrent, которой, определяется ограничивающий прямоугольник для звезды. Сохранение всех углов прямоугольника в рабочей области удерживает звезду в области. Оконная процедура первоначально выравнивает по центру звезду в рабочей области, обрабатывая сообщение WM_CREATE.