代码如下:
if(nIDEvent==dynamic_bk) //动态背景播放
{
if(m_show_bk>2)
m_show_bk=0;
CClientDC dc(this); //客户区DC
CDC compDC; //内存DC
compDC.CreateCompatibleDC(&dc); //创建内存DC与当前设备上下文相兼容
//////////////////////////////////////////
//CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,m_dynamicBk_rect.Width(),m_dynamicBk_rect.Height()); //创建兼容位图
switch(m_show_bk)
{
case 0:
bitmap.LoadBitmap(IDB_BMP_MAINBK01);
break;
case 1:
bitmap.LoadBitmap(IDB_BMP_MAINBK02);
break;
case 2:
bitmap.LoadBitmap(IDB_BMP_MAINBK03);
break;
}
//BITMAP bmp;
//bitmap.GetBitmap(&bmp);
////////////////////////////////////////////////////////////*/
compDC.SelectObject(&bitmap);
compDC.SetTextColor(RGB(255,0,0));
compDC.SetBkColor(RGB(245,245,245));
compDC.TextOut(100,100,"m_show_value");
dc.BitBlt(m_dynamicBk_rect.left,m_dynamicBk_rect.top,m_dynamicBk_rect.Width(),
m_dynamicBk_rect.Height(),&compDC,0,0,SRCCOPY);
}
m_show_bk++;
5 个解决方案
#1
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
if(nIDEvent==dynamic_bk) //动态背景播放
{
if(m_show_bk>2)
m_show_bk=0;
CClientDC dc(this); //客户区DC
CDC compDC; //内存DC
compDC.CreateCompatibleDC(&dc); //创建内存DC与当前设备上下文相兼容
//////////////////////////////////////////
//CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,m_dynamicBk_rect.Width(),m_dynamicBk_rect.Height()); //创建兼容位图
switch(m_show_bk) {
case 0:
bitmap.LoadBitmap(IDB_BMP_MAINBK01);
break;
case 1:
bitmap.LoadBitmap(IDB_BMP_MAINBK02);
break;
case 2:
bitmap.LoadBitmap(IDB_BMP_MAINBK03);
break;
}
//BITMAP bmp;
//bitmap.GetBitmap(&bmp);
////////////////////////////////////////////////////////////*/
compDC.SelectObject(&bitmap);
compDC.SetTextColor(RGB(255,0,0));
compDC.SetBkColor(RGB(245,245,245));
compDC.TextOut(100,100,"m_show_value");
dc.BitBlt(m_dynamicBk_rect.left,m_dynamicBk_rect.top,m_dynamicBk_rect.Width(),
m_dynamicBk_rect.Height(),&compDC,0,0,SRCCOPY);
bitmap.DeleteObject();//加这句再试试?
}
m_show_bk++;
#2
感觉内存、句柄、GDI泄漏了,
#3
估计,是加载绘制图片的代码位置错误
定时器的消息响应函数中,不应该处理图片显示,等界面相关的信息。
定时器,只需要指定定对应的图片就可以了。
由绘制程序(MFC在 OnDraw 函数中处理,Win32 在OnPaint 中处理 )处理图片绘制的事情
定时器的消息响应函数中,不应该处理图片显示,等界面相关的信息。
定时器,只需要指定定对应的图片就可以了。
由绘制程序(MFC在 OnDraw 函数中处理,Win32 在OnPaint 中处理 )处理图片绘制的事情
#4
从不考虑资源释放,,,,
#5
应该是资源泄漏造成,楼主打开资源管理器,点击菜单“查看”——“选择列”,将GDI相关选项勾选,然后运行程序,观察这些使用数量是不是在一直增长,如果是那么就说是GDI泄露了,要记得释放GDI喽!
#1
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
if(nIDEvent==dynamic_bk) //动态背景播放
{
if(m_show_bk>2)
m_show_bk=0;
CClientDC dc(this); //客户区DC
CDC compDC; //内存DC
compDC.CreateCompatibleDC(&dc); //创建内存DC与当前设备上下文相兼容
//////////////////////////////////////////
//CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,m_dynamicBk_rect.Width(),m_dynamicBk_rect.Height()); //创建兼容位图
switch(m_show_bk) {
case 0:
bitmap.LoadBitmap(IDB_BMP_MAINBK01);
break;
case 1:
bitmap.LoadBitmap(IDB_BMP_MAINBK02);
break;
case 2:
bitmap.LoadBitmap(IDB_BMP_MAINBK03);
break;
}
//BITMAP bmp;
//bitmap.GetBitmap(&bmp);
////////////////////////////////////////////////////////////*/
compDC.SelectObject(&bitmap);
compDC.SetTextColor(RGB(255,0,0));
compDC.SetBkColor(RGB(245,245,245));
compDC.TextOut(100,100,"m_show_value");
dc.BitBlt(m_dynamicBk_rect.left,m_dynamicBk_rect.top,m_dynamicBk_rect.Width(),
m_dynamicBk_rect.Height(),&compDC,0,0,SRCCOPY);
bitmap.DeleteObject();//加这句再试试?
}
m_show_bk++;
#2
感觉内存、句柄、GDI泄漏了,
#3
估计,是加载绘制图片的代码位置错误
定时器的消息响应函数中,不应该处理图片显示,等界面相关的信息。
定时器,只需要指定定对应的图片就可以了。
由绘制程序(MFC在 OnDraw 函数中处理,Win32 在OnPaint 中处理 )处理图片绘制的事情
定时器的消息响应函数中,不应该处理图片显示,等界面相关的信息。
定时器,只需要指定定对应的图片就可以了。
由绘制程序(MFC在 OnDraw 函数中处理,Win32 在OnPaint 中处理 )处理图片绘制的事情
#4
从不考虑资源释放,,,,
#5
应该是资源泄漏造成,楼主打开资源管理器,点击菜单“查看”——“选择列”,将GDI相关选项勾选,然后运行程序,观察这些使用数量是不是在一直增长,如果是那么就说是GDI泄露了,要记得释放GDI喽!