关于CBitmap类的LoadBitmapA函数问题???

SenySunny 2012-12-06 09:20:25
学习MFC菜鸟,碰到一个问题就是用CBitmap类的LoadBitmapA函数来加载一个位图资源时,如果需要加载第二次,程序就会崩溃,请问这是为什么??

有什么方法可以解决这个问题?????

程序如下:
	m_bitmap.LoadBitmapA(IDB_SU_START);
GetMenu()->GetSubMenu(3)->SetMenuItemBitmaps(ID_SU_START, MF_BYCOMMAND, &m_bitmap, &m_bitmap);


这样写就没有问题!!
如果写两次,如下:
	m_bitmap.LoadBitmapA(IDB_SU_START);
GetMenu()->GetSubMenu(3)->SetMenuItemBitmaps(ID_SU_START, MF_BYCOMMAND, &m_bitmap, &m_bitmap);
m_bitmap.LoadBitmapA(IDB_SU_PAUSE);
GetMenu()->GetSubMenu(3)->SetMenuItemBitmaps(ID_SU_PAUSE, MF_BYCOMMAND, &m_bitmap, &m_bitmap);

程序就会崩溃!!!!
...全文
228 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
傻X 2012-12-07
  • 打赏
  • 举报
回复
引用 8 楼 li460135301 的回复:
引用 7 楼 tiger9991 的回复:你以为这样就不多申请空间了? 只不过你写的比较简单而已。这个意思就是一般这种情况我们还是需要用多个CBitmap类来解决这个问题???谢谢啊!!
本来就是这样,我建议用多个,最好是数组CBitmap,这样释放起来比较容易。
SenySunny 2012-12-06
  • 打赏
  • 举报
回复
引用 7 楼 tiger9991 的回复:
你以为这样就不多申请空间了? 只不过你写的比较简单而已。
这个意思就是一般这种情况我们还是需要用多个CBitmap类来解决这个问题???谢谢啊!!
傻X 2012-12-06
  • 打赏
  • 举报
回复
你以为这样就不多申请空间了? 只不过你写的比较简单而已。
BlackGhost 2012-12-06
  • 打赏
  • 举报
回复
引用 5 楼 li460135301 的回复:
引用 3 楼 lethe555 的回复:引用 2 楼 li460135301 的回复:引用 1 楼 lethe555 的回复:先调用DeleteObject再第二次load ,简单说 就是你需要创建2个Cbitmap,但是我如果调用DeleteObject();的话,在菜单上显示的图片也就自动消失了啊!! 我本意是在在菜单上显示一些图片!!! 所以你要用2个CBitm……
一个Cbitmap一个时刻对应一个bitmap,好内存是很正常的
SenySunny 2012-12-06
  • 打赏
  • 举报
回复
引用 3 楼 lethe555 的回复:
引用 2 楼 li460135301 的回复:引用 1 楼 lethe555 的回复:先调用DeleteObject再第二次load ,简单说 就是你需要创建2个Cbitmap,但是我如果调用DeleteObject();的话,在菜单上显示的图片也就自动消失了啊!! 我本意是在在菜单上显示一些图片!!! 所以你要用2个CBitmap
我现在的问题是,可能我需要操作很多很多的位图,如果每个位图都要一个CBitmap类的话!那岂不是很耗费内存!!!
SenySunny 2012-12-06
  • 打赏
  • 举报
回复
引用 3 楼 lethe555 的回复:
引用 2 楼 li460135301 的回复:引用 1 楼 lethe555 的回复:先调用DeleteObject再第二次load ,简单说 就是你需要创建2个Cbitmap,但是我如果调用DeleteObject();的话,在菜单上显示的图片也就自动消失了啊!! 我本意是在在菜单上显示一些图片!!! 所以你要用2个CBitmap
哦!!没有用1个CBitmap可以解决的办法???谢谢!!!
BlackGhost 2012-12-06
  • 打赏
  • 举报
回复
引用 2 楼 li460135301 的回复:
引用 1 楼 lethe555 的回复:先调用DeleteObject再第二次load ,简单说 就是你需要创建2个Cbitmap,但是我如果调用DeleteObject();的话,在菜单上显示的图片也就自动消失了啊!! 我本意是在在菜单上显示一些图片!!!
所以你要用2个CBitmap
SenySunny 2012-12-06
  • 打赏
  • 举报
回复
引用 1 楼 lethe555 的回复:
先调用DeleteObject再第二次load ,简单说 就是你需要创建2个Cbitmap,
但是我如果调用DeleteObject();的话,在菜单上显示的图片也就自动消失了啊!! 我本意是在在菜单上显示一些图片!!!
BlackGhost 2012-12-06
  • 打赏
  • 举报
回复
先调用DeleteObject再第二次load ,简单说 就是你需要创建2个Cbitmap,

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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