我是用对话框,上面加了一个List控件,当鼠标右击时,弹出菜单,我使用的是TrackPopupMenu函数弹出的。我想让某个菜单项在不同的情况下显示不同的状态,但是我是用Enable函数,菜单项却没有改变,请问这是怎么会事,我该怎么解决?

解决方案 »

  1.   

    popmenu.EnableMenuItem(ID_CUT, MF_BYCOMMAND|MF_GRAYED);
      

  2.   

    下面的链接是微软的知识库文章,解决了这个问题
    http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q242/5/77.asp&NoWebContent=1
      

  3.   

    确实是不好使啊
    就是这样popmenu.EnableMenuItem(ID_CUT, MF_BYCOMMAND|MF_GRAYED);
    也不行的
    popmenu.EnableMenuItem(ID_CUT, MF_BYCOMMAND|MF_DISABLED);也不行啊
      

  4.   

    如果你每次都重新LoadMenu,
    要用变量记录Enable状态,并在LoadMenu之后,PopupMenu之前,设置状态如果只在初始化时LoadMenu一次,应该没问题
      

  5.   

    对于对话框的菜单响应ON_UPDATE_COMMAND_UI消息,请添加下面代码:
    void CxxxDlg::UpdateMenu(CMenu *pMenu)
    {
        CCmdUI cmdUI;
        cmdUI.m_nIndexMax = pMenu->GetMenuItemCount();
        for(UINT n = 0; n < cmdUI.m_nIndexMax; ++n)
        {
            CMenu* pSubMenu = pMenu->GetSubMenu(n);
            if(pSubMenu == NULL)
            {
                cmdUI.m_nIndex = n;
                cmdUI.m_nID = pMenu->GetMenuItemID(n);
                cmdUI.m_pMenu = pMenu;
                cmdUI.DoUpdate(this, FALSE);
            }
    else
    {
    UpdateMenu(pSubMenu);
    }
        }
    }afx void OnInitMenuPopup(CMenu *pPopupMenu, UINT, BOOL);ON_WM_INITMENUPOPUP()void CxxxDlg::OnInitMenuPoup(CMenu *pPopupMenu, UINT, BOOL)
    {
    UpdateMenu(pPopupMenu);
    }