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

分享到:
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照