关于Invalidate的问题

frequent frequent 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的一个程序,需要在每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)没有成功。


...全文

相关推荐

invalidate

invalidate()的用法 主要用于刷新

qq_15324679

浅谈Android invalidate 分析

本篇文章主要介绍了浅谈Android invalidate 分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38560797

Invalidate() 的用法小解

vc学习,Invalidate(true),Invalidate(false)2008-08-27 08:13在学一个位图显示程序时,发现了图像显示能不能重绘的问题,当时看了msdn,也在网上看了不少回复。总感觉不是很理解。后来仔细试了一下,有点心得,特写出来,以鼓励自己。顺便也为那些和我一样刚开始学习vc的人提供些许帮助。

weijiangtao1717

MFC窗口刷新函数详解[源码]

本文详细介绍了MFC中常用的窗口刷新函数,包括Invalidate、UpdateWindow、InvalidateRect和UpdateData等。Invalidate函数在消息队列中加入WM_PAINT消息,使窗口客户区无效,但不立即刷新;而UpdateWindow则直接发送WM_PAINT消息,立即刷新窗口。文章还解释了这些函数的区别和使用场景,例如InvalidateRect用于指定无效区域,UpdateData用于控件和变量之间的数据更新。此外,文中还提到了OnPaint和OnDraw函数的关系,以及如何避免因不当使用这些函数导致的闪烁问题。最后,文章总结了这些函数的组合使用方法和注意事项,为开发者提供了实用的参考。

alice7model

IDEA代码报红解决法[项目代码]

文章介绍了在使用IntelliJ IDEA时,突然出现代码全部报红的问题及其解决方法。作者指出,这种情况可能是由于缓存问题导致的,并提供了一个简单有效的解决方案:通过File菜单找到Invalidate Caches选项,全选后等待IDEA重启,通常可以解决代码报红的问题。这一方法适用于大多数因缓存引起的代码报红情况,操作简单且效果显著。

s3t4u
评论 4
收藏 已收藏
分享
返回顶部
frequent
VC/MFC 16,550 成员 421,606 内容