RT

解决方案 »

  1.   

    CMenu::EnableMenuItem 
    UINT EnableMenuItem( UINT nIDEnableItem, UINT nEnable );
      

  2.   

    其实是不能实现的,,有点麻烦,,,
    void CSView::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {

    . . . 
      CMenu   menu;   
      menu.CreatePopupMenu(); 
      menu.LoadMenu(IDR_ListCtrlMenu);//   
      menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON|TPM_RIGHTBUTTON,   _point.x,  _point.y,   this); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
           menu.EnableMenuItem(ID_RM_InsertEnd,MF_DISABLED|MF_BYCOMMAND|MF_GRAYED);这个问题困扰我很久了,,我也不清楚为什么不行,,
      

  3.   

    CMenu   menu;   
          menu.CreatePopupMenu(); 
          menu.LoadMenu(IDR_ListCtrlMenu);//   
    menu.EnableMenuItem(ID_RM_InsertEnd,MF_DISABLED|MF_BYCOMMAND|MF_GRAYED);   
          menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON|TPM_RIGHTBUTTON,   _point.x,  _point.y,   this); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
           
      

  4.   

    每个菜单项都有禁用一下,
    submenu = menu.GetSubMenu(0);
    for(int i =0; i < cnt; i++)
    menu.EnableMenuItem(...);
      

  5.   

    submenu = menu.GetSubMenu(0); 
    for(int i =0; i  < cnt; i++) 
    submenu .EnableMenuItem(...);
      

  6.   

    void CSView::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        
        . . . 
          CMenu   menu;   
          menu.CreatePopupMenu(); 
          menu.LoadMenu(IDR_ListCtrlMenu);//      
          menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON|TPM_RIGHTBUTTON,   _point.x,  _point.y,   this); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
           menu.GetSubMenu(0)->EnableMenuItem(ID_RM_InsertEnd,MF_DISABLED|MF_BYCOMMAND|MF_GRAYED);
      

  7.   

    CMenu* subMenu = menu.GetSubMenu(0);
    subMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, 100, 100, this);
    subMenu->EnableMenuItem(ID_RM_InsertEnd, MF_DISABLED | MF_BYCOMMAND | MF_GRAYED);
      

  8.   

    晕,写错了,先Enable,后弹出。
       CMenu* subMenu = menu.GetSubMenu(0);
        subMenu->EnableMenuItem(ID_RM_InsertEnd, MF_DISABLED | MF_BYCOMMAND | MF_GRAYED);
        subMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, 100, 100, this);
      

  9.   

    响应菜单的ON_UPDATE_COMMAND_UI事件调用pCmdUI->Enable(FALSE)就可以
      

  10.   

    先EnableMenuItem,后TrackPopupMenu,都是子菜单操作,看我10楼的代码。
      

  11.   

    to 13,14楼:
        真的不行,我都试过了,难道哪里还需要设置的
    吗?或者你们用的vc版本不同,我用6.0的,,
      

  12.   

    我的也是6.0

    发给我看看[email protected]
    是不是你没有获得正确的指针
      

  13.   

    原来是ID_RM_InsertEnd
    被莫名的改成了ID_MENUITEM32782,
    真是奇怪,,好好地ID_RM_InsertEnd
    怎么就被系统偷梁换柱了呢
      

  14.   

    自己添加一个,然后就可以直接 ctrl+w添加ON_UPDATE_COMMAND_UI函数
    void CMainFrm::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) 
    {
        if (!bSysMenu)
        {
            ASSERT(pPopupMenu != NULL);
            
            // check the enabled state of various menu items
            CCmdUI state;        
            state.m_pMenu = pPopupMenu;
            ASSERT(state.m_pOther == NULL);
            
            state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
            for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
    state.m_nIndex++)
            {
                state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
                if (state.m_nID == 0)
                    continue; // menu separator or invalid cmd - ignore it

                ASSERT(state.m_pOther == NULL);
                ASSERT(state.m_pMenu != NULL);
                if (state.m_nID == (UINT)-1)
                {
                    // possibly a popup menu, route to first item of that popup
                    state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
                    if (state.m_pSubMenu == NULL ||
                        (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
                        state.m_nID == (UINT)-1)
                    {                                 
                        continue; // first item of popup can't be routed to
                    }
                    state.DoUpdate(this, FALSE);  // popups are never auto disabled
                }
                else
                {
                    // normal menu item
                    // Auto enable/disable if command is _not_ a system command
                    state.m_pSubMenu = NULL;
                    state.DoUpdate(this, state.m_nID < 0xF000);
                }
            }
        }
     }