OnCreate函数末尾添加m_Bitmap1.LoadBitmap(IDB_BITMAP1); HMENU hMenu = m_wndMenuBar.GetHMenu();
CMenu* pMainMenu = CMenu::FromHandle(hMenu);
CMenu* pSubMenu = pMainMenu->GetSubMenu(1); pSubMenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_Bitmap1,&m_Bitmap1);居然不好使,菜单图标不显示,指针都有值,添加图标函数返回1,调用也成功, 菜单就是没反映.
VC6和VC2005测试都好使. vc2008和vc2010就不行,怪哉, 大侠们来指点指点
CMenu* pMainMenu = CMenu::FromHandle(hMenu);
CMenu* pSubMenu = pMainMenu->GetSubMenu(1); pSubMenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_Bitmap1,&m_Bitmap1);居然不好使,菜单图标不显示,指针都有值,添加图标函数返回1,调用也成功, 菜单就是没反映.
VC6和VC2005测试都好使. vc2008和vc2010就不行,怪哉, 大侠们来指点指点
放在类声明里或是静态变量试试看
CMenu* pMenu = GetMenu(); 这句返回空值
CMenu* pSubMenu = pMenu->GetSubMenu(1); 再执行这句异常
在vc2008和vc2010 这2句代码都异常vc6和vc2005没问题
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1; // Load bitmaps from resource. Both m_CheckBitmap and m_UnCheckBitmap
// are member variables of CMainFrame class of type CBitmap.
ASSERT(m_CheckBitmap.LoadBitmap(IDB_CHECKBITMAP));
ASSERT(m_UnCheckBitmap.LoadBitmap(IDB_UNCHECKBITMAP)); // Associate bitmaps with the "Test" menu item.
CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(3);
ASSERT(submenu->SetMenuItemBitmaps(ID_HELP_TEST, MF_BYCOMMAND,
&m_CheckBitmap, &m_UnCheckBitmap)); // ...
}CMainFrame::~CMainFrame()
{
// Destroy the bitmap objects if they are loaded successfully
// in OnCreate().
if (m_CheckBitmap.m_hObject)
m_CheckBitmap.DeleteObject(); if (m_UnCheckBitmap.m_hObject)
m_UnCheckBitmap.DeleteObject();
}
看msdn注释,意思是需要自己保证菜单弹出时位图没有被销毁,需要自己把位图作为成员,然后类撤销时销毁位图。