这样重绘是不是有问题,多次重绘后堆栈溢出,有没有解决方法

C++语言 码拜 10年前 (2015-05-11) 1018次浏览 0个评论

/*********************** 重绘 ***********************/
void SaveDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
/*——————– 加载 背景 ——————-*/
CDC  memDC; //定义一个内存设备上下文
CBitmap bmp; //定义位图对象
int nBmpWidth, nBmpHeight; //定义位图宽,高
BITMAP bmInfo; //定义位图信息
CRect clientRC; //定义客户区域

bmp.LoadBitmap(IDB_BITMAP204); //加载背景位图
bmp.GetBitmap(&bmInfo); //获取位图信息
nBmpWidth = bmInfo.bmWidth; //获取位图宽度
nBmpHeight = bmInfo.bmHeight; //获取位图高度
GetClientRect(clientRC); //获取窗口客户区域

memDC.CreateCompatibleDC(&dc); //创建与pDC兼容的设备上下文
memDC.SelectObject(&bmp); //选中位图对象

dc.BitBlt(0,0,clientRC.Width(),clientRC.Height(), &memDC, 0, 0,SRCCOPY);//在窗口中绘图
memDC.DeleteDC(); //释放内存设备上下文
bmp.DeleteObject(); //释放位图对象
}

15分
你每次加载的都是同一幅图像,可以做成静态变量或者全局变量,减少加载次数。
溢出可能是忘记释放什么,你可以注释掉部分代码,重复测试,看看是那一句导致的溢出
可能重入了。
什么是重入,用的是开发板,如何跟踪内存呢
做成全局变量同一界面只能调用一次,帮忙看看这个帖子http://bbs.csdn.net/topics/391041662
5分
oldbmp=memDC.SelectObject(&bmp);选出记一下,释放前选入一下

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明这样重绘是不是有问题,多次重绘后堆栈溢出,有没有解决方法
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!