关于C++桌面应用程序画图的问题

本人用VS2017编写Windows桌面程序的俄罗斯方块,大概的原理就是根据地图来绘制图形,每移动一下都会把地图区域画成白板再根据新地图重新绘图,但是程序出现了一个BUG,每当出现第十五个方块的时候,程序的界面就跟卡住了一样,回到初始的界面,但是程序依然在运行,画图函数也依然在运行,提取函数返回值也是画图成功的,地图也没发生改变,但画出来的就是白板,或者说画不出东西出来了。但是窗口最初始的画的那些边框都还在

这是画图的函数

void GMap::DrawGameMap(HDC &memDc)
{
    COLORREF color = RGB(0, 171, 255);
    for (int i = 0; i < MAPHEIGHT; i++)
    {
        for (int j = 0; j < MAPWIDTH; j++)
        {
            if (MapData[i][j])
            {
                int x = (OBJECTLENTH * 7) + j * OBJECTLENTH+WALLLENTH;
                int y = WALLLENTH + i * OBJECTLENTH;
                RECT rect;
                rect.left = x;
                rect.right = x + OBJECTLENTH;
                rect.top = y;
                rect.bottom = y + OBJECTLENTH;
                FillRect(memDc, &rect, CreateSolidBrush(color));
            }
        }
    }
}

这是画白板的函数

void GMap::DrawBlank(HDC &memDc)
{
    COLORREF color = RGB(255, 255, 255);
    RECT rect;
    rect.left = OBJECTLENTH * 7 + WALLLENTH;
    rect.right =17 * OBJECTLENTH + WALLLENTH;
    rect.top = WALLLENTH;
    rect.bottom = WALLLENTH + 20 * OBJECTLENTH;
    FillRect(memDc, &rect, CreateSolidBrush(color));
}

这是主循环的画图部分

if (GetTickCount() - t > 400 )
        {
            HDC hdc = GetDC(hWnd);
            temp->Down(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
            t = GetTickCount();
        }

这是CALLBACK WndProc函数的画图部分

case WM_KEYDOWN:
        if (wParam==VK_SPACE)
        {
            HDC hdc = GetDC(hWnd);
            temp->Translate(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
        }
        else if (wParam == VK_RIGHT)
        {
            HDC hdc = GetDC(hWnd);
            temp->MoveRight(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
        }
        else if (wParam == VK_LEFT)
        {
            HDC hdc = GetDC(hWnd);
            temp->MoveLeft(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
        }
        else if (wParam == VK_DOWN)
        {
            HDC hdc = GetDC(hWnd);
            temp->Down(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
        }
        break;

程序运行时候的图片

图片说明
程序画不出图像之后的图片
图片说明

之前做贪吃蛇的时候就没出现过这个问题,为什么这个刷新刷新着就画不出图了。。。急QAQ

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!