VC/MFC Release下的菜单图标不显示问题,Debug下正常

时间:2021-07-07 00:22:04
如题,Release下程序菜单中的图标为什么都不显示了呢,Bitmap格式的, 在Debug下正常显示啊,工具栏上的图标两种环境下都正常显示
请问是怎么回事,又该怎么处理呢?

9 个解决方案

#1


以前碰到 相关结构体没初始化 会出现这样问题,DEBUG 没问题,release就没反应。不晓得是不是这方面原因。

#2


引用 1 楼 zison_sun 的回复:
以前碰到 相关结构体没初始化 会出现这样问题,DEBUG 没问题,release就没反应。不晓得是不是这方面原因。

不会吧,我是.LoadBitmap(...)来的,哪有相关结构体呢,你后来是怎么解决的呢

#3


你跟踪图标id,debug下

#4


我在为菜单创建图标的代码是这样的:
在MainFrame的OnCreat(...)函数中,
{
   ...
  CBitmap m_BitStart;
  m_BitStart.LoadBitmap(IDB_BITMAP_START);//IDB_BITMAP_START为我新建的位图资源
  CMenu *subMenu=this->GetMenu()->GetSubMenu(4);
  ASSERT(subMenu->SetMenuItemBitmaps(ID_START_SIMULATION,MF_BYCOMMAN,
         &m_BitStart,&m_BitStart));
   ...//其他菜单图标也都是这样处理的
}
。。。不知道是不是还要在其他地方设置什么,才能在Release下 正常显示菜单图标?

#5


引用 3 楼 whgale 的回复:
你跟踪图标id,debug下

能问下,跟踪图标ID的意图是什么?

#6


CBitmap m_BitStart;
=============
局部变量,函数结束后析构之后,相关的位图对象也被释放了,解决方法有如下几种:
一:改为CBitmap *m_BitStart;
二:在最后调用m_BitStart.Detach(),将类对象与GDI对象分离
三:将CBitmap定义为静态变量或是类成员变量

#7


ASSERT(subMenu->SetMenuItemBitmaps(ID_START_SIMULATION,MF_BYCOMMAN,
  &m_BitStart,&m_BitStart));

囧。。。。
你的这个,在Release编译方式下根本就不会执行。。。ASSERT只有在Debug下有效。。。

#8


Release直接跳过了。。。

#9


引用 7 楼 visualeleven 的回复:
ASSERT(subMenu->SetMenuItemBitmaps(ID_START_SIMULATION,MF_BYCOMMAN,
  &m_BitStart,&m_BitStart));

囧。。。。
你的这个,在Release编译方式下根本就不会执行。。。ASSERT只有在Debug下有效。。。

哈哈,还是我太挫了,你一下就看中根本原因。。。
我平时编程都比较随意,因为我理解的不深,都是用到什么看到什么,用错了也不知道为什么....
谢谢你,把ASSERT 去了 就好了....

#1


以前碰到 相关结构体没初始化 会出现这样问题,DEBUG 没问题,release就没反应。不晓得是不是这方面原因。

#2


引用 1 楼 zison_sun 的回复:
以前碰到 相关结构体没初始化 会出现这样问题,DEBUG 没问题,release就没反应。不晓得是不是这方面原因。

不会吧,我是.LoadBitmap(...)来的,哪有相关结构体呢,你后来是怎么解决的呢

#3


你跟踪图标id,debug下

#4


我在为菜单创建图标的代码是这样的:
在MainFrame的OnCreat(...)函数中,
{
   ...
  CBitmap m_BitStart;
  m_BitStart.LoadBitmap(IDB_BITMAP_START);//IDB_BITMAP_START为我新建的位图资源
  CMenu *subMenu=this->GetMenu()->GetSubMenu(4);
  ASSERT(subMenu->SetMenuItemBitmaps(ID_START_SIMULATION,MF_BYCOMMAN,
         &m_BitStart,&m_BitStart));
   ...//其他菜单图标也都是这样处理的
}
。。。不知道是不是还要在其他地方设置什么,才能在Release下 正常显示菜单图标?

#5


引用 3 楼 whgale 的回复:
你跟踪图标id,debug下

能问下,跟踪图标ID的意图是什么?

#6


CBitmap m_BitStart;
=============
局部变量,函数结束后析构之后,相关的位图对象也被释放了,解决方法有如下几种:
一:改为CBitmap *m_BitStart;
二:在最后调用m_BitStart.Detach(),将类对象与GDI对象分离
三:将CBitmap定义为静态变量或是类成员变量

#7


ASSERT(subMenu->SetMenuItemBitmaps(ID_START_SIMULATION,MF_BYCOMMAN,
  &m_BitStart,&m_BitStart));

囧。。。。
你的这个,在Release编译方式下根本就不会执行。。。ASSERT只有在Debug下有效。。。

#8


Release直接跳过了。。。

#9


引用 7 楼 visualeleven 的回复:
ASSERT(subMenu->SetMenuItemBitmaps(ID_START_SIMULATION,MF_BYCOMMAN,
  &m_BitStart,&m_BitStart));

囧。。。。
你的这个,在Release编译方式下根本就不会执行。。。ASSERT只有在Debug下有效。。。

哈哈,还是我太挫了,你一下就看中根本原因。。。
我平时编程都比较随意,因为我理解的不深,都是用到什么看到什么,用错了也不知道为什么....
谢谢你,把ASSERT 去了 就好了....