界面图标消失的疑惑

米克贝瑞 2007-08-31 09:52:11
我用下面的代码,轮流在一个pic控件里面显示一个图标,时间间隔用Timer控制:
static unsigned long g_num=0;
CString strState;
void CTestDlg::OnTimer(UINT nIDEvent)
{
g_num++;

if(g_num%3==0)
m_pic2.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_COMM_OK)));
if(g_num%3==1)
m_pic2.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_COMM_ERROR)));
if(g_num%3==2)
m_pic2.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_COMM_WARNING)));

strState.Format("重绘次数: %d",g_num);
m_num.SetWindowText(strState);

CDialog::OnTimer(nIDEvent);
}


但是当画到8000-9000次的时候,奇怪的事情发生了,pic里面显示的图标消失了,但是m_num里面还显示一直在画.

请问这个问题怎么解决?
...全文
168 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
skybluehacker 2007-08-31
  • 打赏
  • 举报
回复
楼主,建议先找相关的书籍加强一下代码编写的质量,虽说是简单的代码,但似乎也有点过分,这些都可能出现大意的BUG;

你的1,2,3情况,最好用switch语法;
Bug猜测:
1.用Switch(n),加上default情况的处理,可能你的结果不在你的0,1,2三个数内;
2.(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_COMM_OK))等,
不要多次载入,你只需要一次载入,用全局的句柄保存则可,只需要用
HBITMAP g_bmpCommOK则可,或者问题出在系统多过量载入,导致然后返回没有成功,返回结果最好也作检测,或者读取位图没有成功;
3.Timer机制的使用,你的机制不是优秀的,起码你最好检测这个Timer是不是你SetTimer()的值,是就不用仍给Dialog::OnTimer()了,不是自己也不处理;
4.除非你必须要text输出,不然你完全可以用Trace代替,因为这些代码也可能是引起问题的所在,(只是看到"重绘次数:"等字样,冒昧猜测不是功能需求);

前面朋友说的异常,溢出等都是可能,乍看感觉这些问题应该很简单的,尝试屏蔽,替换,跟进等调试方法,估计也很快完事。
都是搞技术的,不是想批评你,如有冒犯,还请海涵。呵呵。。
向立天 2007-08-31
  • 打赏
  • 举报
回复
我建议你先把要显示的图标加载进来,
放到一个HICON里,
这样你就不会每次都创建新句柄了
当然最后要释放掉这三个HICON
米克贝瑞 2007-08-31
  • 打赏
  • 举报
回复
这段代码里面怎么获取HICON ?
米克贝瑞 2007-08-31
  • 打赏
  • 举报
回复
恩,有道理.请问怎么destroyicon??
zhuzhu101011 2007-08-31
  • 打赏
  • 举报
回复
应该是没释放图标导致图标缓存耗尽,你画完图标的时候destroyicon一下
米克贝瑞 2007-08-31
  • 打赏
  • 举报
回复
to xianglitian(向立天) :

应该是没有内存泄露.到9000次的时候,不仅pic里面的图标消失了,连桌面上的其他程序的界面都消失了一部份.郁闷.请问怎么写才规范呢?


to jhs1982419() ( ) :
你说当到了这个时间间隔后,图标肯定要消失的,不明白是什么意思?还请继指教啊
jhs1982419 2007-08-31
  • 打赏
  • 举报
回复
你有时间间隔的限制,当到了这个时间间隔后,图标肯定要消失的,你可以把时间间隔弄长点试下。
向立天 2007-08-31
  • 打赏
  • 举报
回复
我觉得你这种做法不是很规范,
你看一下有没有内存泄露。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧