Перемещение по экрану графических вставок из bmp-файлов в WIN про-граммах. Использование двух контекстов памяти

Организовать движение отдельных блоков растрового изображения по экрану в Windows-программах значительно легче, чем в соответствующих DOS-программах. Здесь уже имеются готовые API-функции, которые позволяют легко осуществить эти действия.

            Возьмем за основу программу mov08.cpp. Новую программу назовем mov09.

            Рисование динамических и статических объектов программы происходит в основном контексте памяти hdcMem. Растровое изображение из bmp-файла помещается в дополнительный контекст памяти hdcMem2.

            В начале рисования растровое изображение  из вспомогательного контекста будем копировать в основной контекст не целиком, а отдельными блоками равными окну вагона. Причем эти блоки каждый раз будем брать из разных частей растрового изображения во вспомогательном контексте памяти, этим создавая иллюзию движения. Копирование из дополнительного контекста памяти в основной контекст памяти выполняется с помощью функции BitBlt().

            Затем начинается рисование в основном контексте памяти, где уже содержится растровое изображение. После того, как все графические объекты приложения будут нарисованы в основном контексте памяти, этот контекст копируется на контекст экрана с помощью функции BitBlt().

            Приведем фрагмент кода копирования блока растрового изображения из выбранного места вспомогательного контекста в определенное место основного контекста. Этот фрагмент находится в функции Move_OnTimer().

      static int nPixel = 0;

 

      BitBlt(hdcMem, xn1,yn1,xn2-xn1,yn2-yn1, hdcMem2, nPixel++,yn1, SRCCOPY);

      if(nPixel+(xn2-xn1)>nRight-nLeft)

            nPixel = 0;

            Здесь берется блок изображения с размером xn2-xn1 пикселей по горизонтали и пикселей yn2-yn1 по вертикали. Во вспомогательном контексте этот блок имеет координаты левого верхнего угла nPixel,yn1. Этот блок копируется в основной контекст с координатами левого верхнего угла xn1,yn1.

            Координата блока nPixel по горизонтальной оси меняется на единицу на каждом шаге движения. При этом выделенный блок движется от левой границы растрового изображения до правой границы изображения. Потом все повторяется. 

            Координаты окна вагона в пикселях xn1,yn1,xn2,yn2 вычисляются в функции Move_OnCreate(). В этой функции задаются координаты окна вагонаxW1,yW1,xW2,yW2 в мировых координатах.

            Аналогично DOS-программе, здесь для рисования окна и занавески используются функции WindowWagon()и Curtain().

Компилируем, запускаем программу mov09.exe, и результат работы этой программы показан на Рис.39.

 

 

Ссылка на основную публикацию
Adblock detector