Здравствуйте! Хочу поворачивать Bitmap на 90 градусов после каждого нажатия клавиши R. Битовый образ поворачивается только один раз. Не подскажите в чем ошибка?
Код:
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
const int cxMove = 10, cyMove = 10, cxTotal = 230, cyTotal = 230;
static HBITMAP hBitmap;
static int xCenter, yCenter;
HBRUSH hBrush;
HPEN hPen;
HDC hdc, hdcMem;
PAINTSTRUCT ps;
float angle = 0.0;
RECT rect;
static BITMAP bm;
POINT pt [3];
switch (iMsg)
{
case WM_SIZE: xCenter = LOWORD (lParam) / 2;
yCenter = HIWORD (lParam) / 2;
if(hBitmap)
DeleteObject(hBitmap);
hdc = GetDC (hwnd);
hdcMem = CreateCompatibleDC (hdc);
hBitmap = CreateCompatibleBitmap (hdc, cxTotal, cyTotal);
ReleaseDC (hwnd, hdc);
SelectObject (hdcMem, hBitmap);
hBrush = CreateSolidBrush (RGB (91, 146, 229));
SelectObject (hdcMem, hBrush);
Rectangle (hdcMem, -1, -1, cxTotal + 1, cyTotal + 1);
......................................................................
DeleteDC (hdcMem);
DeleteObject (hBrush);
DeleteObject (hPen);
return 0;
case WM_KEYDOWN: if (!hBitmap)
break;
hdc = GetDC (hwnd);
hdcMem = CreateCompatibleDC (hdc);
SelectObject (hdcMem, hBitmap);
switch (wParam)
{
case VK_LEFT: BitBlt (hdc, (xCenter + cxTotal) / 2, (yCenter + cyTotal) / 2, cxTotal, cyTotal, hdcMem, 0, 0, SRCCOPY);
xCenter -= cxMove;
break;
case VK_RIGHT: BitBlt (hdc, (xCenter + cxTotal) / 2, (yCenter + cyTotal) / 2, cxTotal, cyTotal, hdcMem, 0, 0, SRCCOPY);
xCenter += cxMove;
break;
case VK_UP: BitBlt (hdc, (xCenter + cxTotal) / 2, (yCenter + cyTotal) / 2, cxTotal, cyTotal, hdcMem, 0, 0, SRCCOPY);
yCenter -= cyMove;
break;
case VK_DOWN: BitBlt (hdc, (xCenter + cxTotal) / 2, (yCenter + cyTotal) / 2, cxTotal, cyTotal, hdcMem, 0, 0, SRCCOPY);
yCenter += cyMove;
break;
case 0x52:
GetObject (hBitmap, sizeof (bm), &bm);
pt [0].x = bm.bmWidth + cxTotal;
pt [0].y = bm.bmHeight;
pt [1].x = bm.bmWidth + cxTotal;
pt [1].y = bm.bmHeight + cyTotal;
pt [2].x = bm.bmWidth;
pt [2].y = bm.bmHeight;
PlgBlt (hdc, pt, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, NULL, 0, 0);
break;
default:
break;
}
ReleaseDC (hwnd, hdc);
DeleteDC (hdcMem);
return 0;
case WM_DESTROY: if(hBitmap)
DeleteObject(hBitmap);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
Да, и как стереть предыдущий битовый образ? Пробовал InvalidateRect, но тогда стирается и текущее изображение. Заранее спасибо!