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就不行,怪哉, 大侠们来指点指点

解决方案 »

  1.   

    m_Bitmap1.LoadBitmap(IDB_BITMAP1);CMenu* pMenu = GetMenu();CMenu* pSubMenu = pMenu->GetSubMenu(1);pSubMenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_Bitmap1,&m_Bitmap1);这样是可以的
      

  2.   

    m_Bitmap1是不是局部变量?
    放在类声明里或是静态变量试试看
      

  3.   


    CMenu* pMenu = GetMenu(); 这句返回空值
    CMenu* pSubMenu = pMenu->GetSubMenu(1); 再执行这句异常
    在vc2008和vc2010  这2句代码都异常vc6和vc2005没问题
      

  4.   

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
       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注释,意思是需要自己保证菜单弹出时位图没有被销毁,需要自己把位图作为成员,然后类撤销时销毁位图。