关于Invalidate的有关问题

关于Invalidate的问题
本帖最后由 frequent 于 2014-02-14 22:48:25 编辑
我的一个程序,需要在每0.1秒内调用Invalidate刷新屏幕。前面一直都没问题。但到16分钟多后,就出现异常了,界面不刷新了。就边点击菜单都会先出来一块黑块,过几秒钟才出来,窗口上的其它控件也不刷新。
在VC2010下调试运行时,在出错的时候,输出窗口中显示有如下错误。
0x74e7812f 处最可能的异常: Microsoft C++ 异常: 内存位置 CResourceException

OnPaint中代码如下

CPaintDC dcMic(GetDlgItem(IDC_PIC_MIC));
CBitmap bmp; 
bmp.LoadBitmap(IDB_BITMAP1); 
//得到图片信息 
BITMAP bmpInfo; 
bmp.GetBitmap(&bmpInfo); 
//在内存中创建一个位图兼容设备 
CDC dcMemory1,dcMemory2; 
dcMemory1.CreateCompatibleDC(&dcMic); 
//将图片选入兼容设备 
CBitmap *pOldBmp=dcMemory1.SelectObject(&bmp); 
//将兼容设备的内容copy到屏幕设备中,实现真正的Paint 
dcMic.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory1, 0, 0, SRCCOPY); 
dcMemory1.SelectObject(pOldBmp); 
dcMic.FillSolidRect(0,0,(int)(280*g_fInPic),18,RGB(51,0,51));

显示问题出在bmp.GetBitmap。
软件断在afxwin1.inl中GetBitmap下的ASSERT(m_hObject != NULL),我怀疑可能是bmp.LoadBitmap(IDB_BITMAP1)没有成功。



------解决方案--------------------
CBitmap bmp; 
bmp.LoadBitmap(IDB_BITMAP1); 
// .h
CBitmap m_bmp; 
// 构造函数:
m_bmp.LoadBitmap(IDB_BITMAP1);