Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2013, 12:25   #1
RocBoy-D
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 10
По умолчанию Поворот битового образа на 90 градусов

Здравствуйте! Хочу поворачивать 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, но тогда стирается и текущее изображение. Заранее спасибо!
RocBoy-D вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поворот битового образа на 90 градусов RocBoy-D Помощь студентам 0 14.04.2013 10:54
Как получить указатель на первый байт битового образа? Don Karleone Общие вопросы Delphi 2 05.05.2012 09:12
Поворот матрицы на 90 градусов Альбиша Помощь студентам 2 26.05.2010 01:19
Вывести на экран шестнадцатиричное представление битового образа из памяти Kravnos Общие вопросы C/C++ 1 01.12.2009 23:49