修改菜单项的函数功能ModifyMenu()已经实现,不过那是在打开软件后,修改指定的菜单项。
现在想实现在用户看到菜单前,就修改了菜单项,应该在哪一步调用修改菜单函数。
加在框架类OnCreate或者PreCreateWindow里直接崩溃掉,提示取不到菜单GetMenu()

解决方案 »

  1.   

    最早有menu在哪里,你查查这个吧,这样就可以了
      

  2.   

    实在不知道在哪的话可以在OnCreate最后post一个自定义的消息,然后在消息里处理
      

  3.   

    CMenu *menu = GetMenu();
    CString strname;
    menu->GetMenuString(UINT(menu->GetSubMenu(1)->m_hMenu),strname,MF_BYCOMMAND);在MainFrm的create函数最后 GetMenu可以得到菜单
      

  4.   


    BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle , const RECT& rect , CWnd* pParentWnd , LPCTSTR lpszMenuName , DWORD dwExStyle , CCreateContext* pContext)
    {
        CBHotKeySetting *pHotKeySetting = theApp.getSetting()->getHotKeySetting(); 
        CMenu *menu = GetMenu();
        //修改菜单
        for(int iIndex = 0; iIndex < pHotKeySetting->getHotKeyCount(); iIndex++)
            pHotKeySetting->modifyMenuHotKey(iIndex, menu); 
        return __super::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, lpszMenuName, dwExStyle, pContext);
    }
    还是会报错呢
      

  5.   

    跳转到这里
    { ASSERT(::IsWindow(m_hWnd)); return CMenu::FromHandle(::GetMenu(m_hWnd)); }
      

  6.   

    在intitInstance函数最后,showwindow之前;别在OnCreate或者PreCreateWindow这里了;
    precreatewindow是在构建窗口类的时候的事件;
    onCreate是响应WM_CREATE的【createWindow没返回之前】
    都没有构建菜单
      

  7.   

    结贴,最后加在这里
    void CMainFrame::OnInitMenu(CMenu* pMenu)
    {
        __super::OnInitMenu(pMenu);    //修改菜单
         。
    }