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中占用的内存不断增加,并且过了大约半分钟之后程序就卡死了。这该怎么办啊?求大神解决。

购物车
发表新帖
立即签到







