Устранить мерцание при рисовании

LRESULT _stdcall WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM 
lParam)
{
const INT step = 5;
switch (uMsg) {
case WM_DESTROY:
{
    PostQuitMessage(0);
    break;
}

case WM_KEYDOWN:
    const tagRECT rect(XE - step, YE - step, XE + 50 + step, YE + 50 + step);
    switch (wParam) {
    case VK_LEFT: // Обрабатывает клавишу LEFT ARROW (Стрелка влево)
        if (XE > 400) {
            XE -= step;
            InvalidateRect(hwnd, &rect, TRUE);
        }
        break;
    case VK_RIGHT: // Обрабатывает клавишу RIGHT ARROW (Стрелка вправо)
        if (XE < 900 - 50) {
            XE += step;
            InvalidateRect(hwnd, &rect, TRUE);
        }
        break;
    case VK_UP: // Обрабатывает клавишу UP ARROW (Стрелка вверх) 
        if (YE > 200) {
            YE -= step;
            InvalidateRect(hwnd, &rect, TRUE);
        }
        break;
    case VK_DOWN: // Обрабатывает клавишу DOWN ARROW (Стрелка вниз)
        if (YE < 600 - 50) {
            YE += step;
            InvalidateRect(hwnd, &rect, TRUE);
        }
        break;
    default:
        break;
    }

case WM_PAINT:
{
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);
    Graphics g(hdc);

    Pen pen(Color(255, 255, 0, 255)), pd(Color(255, 0, 0, 0), 3);
    SolidBrush sb(Color(192, 255, 0, 0)), sd(Color(255, 0, 0));
    g.DrawLine(&pen, 0, 0, 500, 100);
    g.FillRectangle(&sb, Rect(0, 0, 100, 100));
    g.DrawRectangle(&pd, Rect(400, 200, 500, 400));
    g.FillEllipse(&sd, Rect(XE, YE, 50, 50));

    EndPaint(hwnd, &ps);
    break;
}
default: return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}

}

У меня проблема в том, что при нажатии клавиш происходит перерисовывание с мерцанием, подскажите, как полностью убрать мерцание; вверху метод, где происходит движение и рисование объекта.


Ответы (0 шт):