C++绘制同一背景图片时占用内存不断增加,求大神帮帮忙
发表在C++图书答疑
2019-08-24
《C++项目开发实战入门》第1章 坦克动荡游戏 26页-30页
是否精华
是
否
版块置顶:
是
否
void Game::Drawfps(Graphics& graphic) { static int fps = 0; m_fps++; static DWORD dwLast = GetTickCount(); if (GetTickCount() - dwLast >= 1000) { fps = m_fps; m_fps = 0; dwLast = GetTickCount(); } //输出帧率 CString s; s.Format(_T("帧率:%d"), fps); SolidBrush brush(Color::Red); Gdiplus::Font font(_T("宋体"), 10.0); CRect rect; ::GetClientRect(m_hwnd, &rect); PointF origin(static_cast<float>(rect.right - 58), static_cast<float>(rect.top + 2)); graphic.DrawString(s.GetString(), -1, &font, origin, &brush); } void Game::GameRunDraw() { HDC hdc = ::GetDC(m_hwnd); //客户区大小 CRect rc; GetClientRect(m_hwnd, &rc); CDC* dc = CClientDC::FromHandle(hdc); //双缓冲绘图 CDC m_dcMemory; CBitmap bmp; bmp.CreateCompatibleBitmap(dc, rc.Width(), rc.Height()); m_dcMemory.CreateCompatibleDC(dc); CBitmap* pOldBitmap = m_dcMemory.SelectObject(&bmp); //构造对象 Graphics gh(m_dcMemory.GetSafeHdc()); //清除背景 gh.Clear(Color::White); gh.ResetClip(); //画入内存 Drawfps(gh); //画出一幅图片 CRect rect; GetClientRect(m_hwnd, rect); //载入图片 Gdiplus::Image* img = Image::FromFile(_T("res\\menu_background.png")); //画出图片 gh.DrawImage(img, rect.left, rect.top, rect.Width(), rect.Height()); //输出到屏幕 ::BitBlt(hdc, 0, 0, rc.Width(), rc.Height(), m_dcMemory.GetSafeHdc(), 0, 0, SRCCOPY); dc->DeleteDC(); }
这段代码是呈现窗体背景图片的,程序目前为止只到了显示背景图片这个阶段,但是程序运行的时候我看到visual studio中占用的内存不断增加,并且过了大约半分钟之后程序就卡死了。这该怎么办啊?求大神解决。