//don't do this!!when local variable goes out of scope ,
//windows API object is destroyed.
//
CMenu cm;
cm.LoadMenu(IDR_MAINMENU);The append operation will be short_lived
//
CMenu* pMenu =GetMenu();
pMenu->AppendMenu(MF_POP_UP,(UINT)cm.m_hMenu,"sdfsd");我对上面的解释的错误原因 不了解 大家能详细接受以下吗?

解决方案 »

  1.   

    那应该这样更改呢 请教?是不是将其改为成员变量CMenu m_cm; ???
      

  2.   

    还有一个问题 我在一个函数中这样写:
    public:
        CMenu m_menu;    HMENU m_hmenu;HMENU CtrayDlg::CreateMenu()
    {
     m_menu.LoadMenu(IDR_MENU1);
     return m_menu.Detach();
    }
    在对话矿的OnInitDialog()
    {
       HMENU m_Menu =  NewMenu();
    }
    在一个消息响应函数里发现在调用m_menu和 m_hmenu都回出错是怎么回事啊 ?  这两个问题请高手解答?
      

  3.   

    我说错了应该是这样的
    public: 
        CMenu m_menu; HMENU CtrayDlg::CreateMenu() 

     m_menu.LoadMenu(IDR_MENU1); 
     return m_menu.Detach(); 
    } 在对话矿的OnInitDialog() 

       HMENU m_Menu =  NewMenu(); 

    然后在另一个函数中
    fun()
    {
    ASSERT(m_menu);  //在这里出错 ?????????????????????????????????????????????
    }