Растровое изображение, находящееся в bitmap-ресурсе обрабатывается следующим образом

Это сделано для того, чтобы идентификатор приложения стал глобальной переменной в программе.

В функции Move_OnCreate() изменим размеры поля вывода, сделав его размером 640´480.

            nLeft = 60; nRight  = 700; mTop  = 15; mBottom = 495;

 

            Растровое изображение, находящееся в bitmap-ресурсе обрабатывается следующим образом.

При создании исполняемого exe-файла, все ресурсы, в том числе и bitmap-ресурсы, располагаются в exe-файле. Чтобы использовать bitmap-ресурс, ему надо придать в памяти вид битовой карты. Эту операцию выполняет функция LoadBitmap(). Эта функция  берет bitmap-ресурс из загруженного в память exe-файла, придает bitmap-ресурсу вид битовой карты и загружает в новую область памяти.

            Далее для рисования в памяти создается контекст памяти, совместимый с контекстом экрана, с помощью функции CreateCompatibleDC().

Затем битовая карта связывается с контекстом памяти с помощью функции SelectObject().

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

В конце полагается убрать битовую карту из памяти, восстановить контекст памяти и убрать контекст памяти. 

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

//создаем контекст памяти hdcMem, совместимый с контекстом экрана hdc

HDC hdcMem = CreateCompatibleDC(hdc);

 

//загружаем в память bitmap-ресурс из модуля exe-файла

//hInstApp — идентификатор экземпляра приложения

//»BitmapShip» — идентификатор bitmap-ресурса (в файле ресурсов)

//hBitmap — идентификатор загруженного bitmap-ресурса

HBITMAP hBitmap = LoadBitmap(hInstApp, «BitmapShip»);

 

//выбираем bitmap-объект hBitmap в контекст памяти hdcMem

HBITMAP hBitmapOld = (HBITMAP)SelectObject(hdcMem, hBitmap);

 

//копируем изображение из контекста памяти в контекст экрана

BitBlt(hdc, nLeft, mTop, nRight-nLeft, mBottom-mTop, hdcMem, 0, 0, SRCCOPY);

 

DeleteObject(hBitmap);     //убираем растровое изображение из памяти

SelectObject(hdcMem, hBitmapOld); //восстанавливаем контекст памяти

DeleteDC(hdcMem);                 //убираем контекст памяти

Убираем строчку вызова функции, которая рисовала старый фон.

//   Land(hdc);

Компилируем, запускаем программу mov07.exe, и результат работы этой программы будет таким же, как и на Рис.34. Правда, насыщенность красок буде несравненно выше.

 

 

 

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