我编辑了一个菜单,让其在点鼠标右键时出现,我希望其中的菜单项在一定条件下是灰的,请问该怎么做。我试过加入一个OnUpdate*的函数,可是我debug的时候发现这个函数并不是在菜单出现时响应,而是要点该菜单项以后才响应,这点似乎跟窗口上的那些下拉菜单不一样,请问要怎么使右键出来的菜单中项目变灰

解决方案 »

  1.   

    CMenu menu;
    ClientToScreen(&point);
    VERIFY( menu.LoadMenu( IDR_MENU1 ) );
    CMenu* popup = menu.GetSubMenu(0);
    ASSERT( popup != NULL );
    popup->EnableMenuItem(ID_POPUP1, MF_BYCOMMAND|MF_GRAYED);
    popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );  //注意:必须要在TrackPopupMenu之前EnableMenuItem,否则无效
      

  2.   

    To lixiaosan:
    我按你说的方法进行了修改,把你给的代码加到了void CImgContainerWnd::OnContextMenu(CWnd* pWnd, CPoint point) 中,然后通过classwizard给ID_POPUP1加入了UPDATE_COMMAND_UI的响应消息,可是执行后那个菜单项始终都是灰的,debug的时候我发现程序根本没跳到onUpdata*(……)的这个函数中,请问这是为什么
      

  3.   

    土方法:
    CMenu menu;
    CMenu* popup = menu.GetSubMenu(0);
    popup->TrackPopupMenu(......); 响应UPDATE_COMMAND_UI,在响应函数里面添加
    pCmdUI->Enable(IsXXX(...))
    其中IsXXX(..)函数是自己添加的
    在里面可以判定特定条件后返回true or false