VC++中频繁读取位图,频繁重绘发生意外结果怎么回事?

重绘命令是这个:InvalidateRect(hWnd,NULL,1)位图读取是用这个代码:hbmp=(HBITMAP)LoadImage(NULL,L"..\\snc.... 重绘命令是这个: InvalidateRect(hWnd,NULL,1)
位图读取是用这个代码:hbmp =(HBITMAP)LoadImage(NULL,L"..\\snc.bmp",IMAGE_BITMAP,700,450,LR_LOADFROMFILE);
SelectObject(mdc,hbmp);
BitBlt(hdc,162,30,700,450,mdc,0,0,SRCCOPY);

图像什么都可以正常显示,但是频繁重绘后,到大概上百次以后就发生位图无法读入的问题。ReleaseDC也用过,并不好使,求好心人解释,而且好像是大图才有的问题。
展开
 我来答
swordlea
2012-07-16 · TA获得超过460个赞
知道答主
回答量:26
采纳率:0%
帮助的人:17.6万
展开全部
位图无法读入是由于GDI句柄资源耗尽导致的。当使用完资源后,必须通过调用函数以释放被占用的句柄资源,对于位图资源,需要使用DeleteObject函数释放。这是因为,在调用LoadImage这类API时,系统会在堆中分配GDI资源,直到用户调用了对应的函数,或者程序正常退出时,这些句柄资源才会被释放。而这些句柄资源在系统中是有限的,当对其申请达到上限时,程序就会发生异常,甚至还会导致系统异常(比如无法启动新的应用程序,程序窗体文字无法正常显示等)。以前我在写程序的过程中,也遇到这样的问题,当时连任务管理器无法启动(因为新程序启动时也会申请GDI句柄资源)。后来使用BoundsChecker之类的工具,才检测到是某个逻辑分支没有调用对应的释放函数(正是DeleteObject函数),加上去就好了。

参考资料: http://baike.baidu.com/view/1080246.htm

意法半导体(中国)投资有限公司
2023-06-12 广告
单片机复位电路原理通常包括以下几个主要步骤:1. 电平检测:单片机复位电路需要检测一个关键参数,即控制器的复位引脚是否处于高电平(2V)。如果复位引脚没有高电平,复位电路就会启动一个复位过程来清除单片机内部的错误状态并将其恢复到正常状态。2... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
Bk0X
2012-07-16 · TA获得超过9413个赞
知道小有建树答主
回答量:1217
采纳率:60%
帮助的人:670万
展开全部
是不是没有调用过DeleteObject来释放过位图呢.
不释放的话就等于内存泄露, 可能会有资源用尽的问题..

而且位图的话, 也不需要每次重绘都读取一次的.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式