У меня есть следующая функция для рисования загруженного растрового изображения в окне.
void OnPaint(HWND hwnd) {
PAINTSTRUCT ps;
HDC hdc;
BITMAP bitmap;
HDC hdcMem;
HGDIOBJ oldBitmap;
hdc = BeginPaint(hwnd, &ps);
hdcMem = CreateCompatibleDC(hdc);
HBITMAP bmp = mainBitmap;
oldBitmap = SelectObject(hdcMem, mainBitmap);
GetObject(bmp, sizeof(bitmap), &bitmap);
x += 64;
RECT rect;
rect.left = x;
rect.top = 0;
rect.right = x+64;
rect.bottom = 64;
HBITMAP hBmp = CreateCompatibleBitmap(
hdc, // Handle to a device context
rect.right - rect.left, // Bitmap width
rect.bottom - rect.top // Bitmap height
);
BitBlt(
hdc, // Destination rectangle context handle
0, // Destination rectangle x-coordinate
0, // Destination rectangle y-coordinate
rect.right - rect.left, // Destination rectangle width
rect.bottom - rect.top, // Destination rectangle height
hdcMem, // A handle to the source device context
rect.left, // Source rectangle x-coordinate
rect.top, // Source rectangle y-coordinate
SRCCOPY // Raster-operation code
);
SelectObject(hdcMem, oldBitmap);
DeleteDC(hdcMem);
EndPaint(hwnd, &ps);
}
И у меня есть следующее изображение, загруженное в HBITMAP mainBitmap
:
Изображение рисуется, когда окно открывается успешно, и я вижу первый значок в растровом изображении спрайта (желтый захват), но моя проблема в том, когда я нажимаю 'C'
чтобы перекрасить окно, изображение не меняется на следующий значок в изображении спрайта.
Вещи, которые я знаю
При инициализации, x = 64;
Каждый раз, когда я нажимаю 'C'
Краска называется. (Подтверждено в визуальном
Studio Debugger)
х увеличивается на 64 каждый раз OnPaint
называется.
Почему графика не меняется?
Вот мой WindowsProc
функция для обработки WM_PAINT
сообщение:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
HANDLE_MSG(hwnd, WM_PAINT, OnPaint);
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
Попробуй позвонить функция InvalidateRect () обновить регион.
Других решений пока нет …