Winapi — C ++ Рисование с помощью BitBlt

У меня есть функция для игры, над которой я работаю:

void DrawMap()
{
BITMAP bm;
PAINTSTRUCT ps;
HBITMAP sprites = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_COLOR_SPRITES));
HDC hdc = BeginPaint(hWnd, &ps);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, sprites);
GetObject(sprites, sizeof(bm), &bm);

// Find x and y coordinate for the top left of the visible screen
int x = 4, y = 4, ypos = 0;

// Draw lower layer
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
BitBlt(hdc, (i * 32) + 36, (j * 32) + 36, 32, 32, hdcMem, game.get_pos(game.Layer_One[x + i][y + j], ypos), ypos, SRCCOPY);

// Draw upper layer
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
if (game.Layer_One[x + i][y + j] != 0)
BitBlt(hdc, (i * 32) + 36, (j * 32) + 36, 32, 32, hdcMem, game.get_pos(game.Layer_One[x + i][y + j], ypos, true), ypos, SRCCOPY);

SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
EndPaint(hWnd, &ps);
}

Переменная ‘game’ — это экземпляр класса, который я создал для хранения всех игровых переменных и функций. В основном то, что должны сгруппировать два цикла for, — это создать двухслойную сетку размером 9 на 9 с ячейками размером 32 на 32 пикселя, которые копируются из изображения, в котором все плитки размещены в одном месте. Я проверил свою функцию get_pos (), и она возвращает правильные позиции x и y для частичного растрового изображения в растровом растровом изображении с полными спрайтами.
Второй параметр get_pos () является ссылкой, поэтому он может дать значение y таким образом и вернуть значение x.
По какой-то причине моя функция, хотя, на мой взгляд, правильно настроена (и определенно вызвана), не производит никакого рисования на hWnd. Что я сделал не так?

2

Решение

Он не дает прямого ответа на ваш вопрос, но если вам не нужна совместимость с очень старыми версиями Windows, почему бы не использовать Direct2D? GDI очень устарел (не говоря уже о медленном).

-1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector