我用如下方法弹出菜单,
Menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_VERTICAL,CurPoint.x,CurPoint.y,this);在这之前先设置好了各菜单项的状态变量,有效或无效,具体程序如下
void CNodeTreeView::OnUpdateTreeAddCommunity(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
      if(m_bCommunityMenu)//菜单项的状态变量
         pCmdUI->Enable(true);
      else
pCmdUI->Enable(false);
}
可每次都是先弹出菜单,等到点击菜单项的时候才执行OnUpdateTreeAddCommunity,
这样事先对菜单项状态的控制就失效了,该怎么解决呢?

解决方案 »

  1.   

    没有显示菜单是不可能调用 OnUpdate...的,
    对于你的问题,如下代码可以:
    CMenu Menu;
    CMenu* pPopup;Menu.LoadMenu(IDR_MENU_SOURCE_CONFIG);
    pPopup = Menu.GetSubMenu(0);
    if ( bEnable )
    {
    pPopup->CheckMenuItem(ID_MENU_ENABLE_FILE,MF_CHECKED | MF_BYCOMMAND);
    }
    else
    {
    pPopup->CheckMenuItem(ID_MENU_ENABLE_FILE,MF_UNCHECKED | MF_BYCOMMAND);
    }
    pPopup->TrackPopupMenu(TPM_LEFTALIGN |TPM_LEFTBUTTON,point.x,point.y,this);
      

  2.   

    我的问题是:
       程序运行时先弹出菜单,等到点击菜单项的时候才执行OnUpdateTreeAddCommunity,这样事先对菜单项状态的控制就失效了啊?以上的方法我试了,不行啊!
      

  3.   

    我不是很明白你的意思。对于弹出式菜单OnUpdate...好像没有实际意义。要使菜单项处于选中或非选中状态,一般在TrackPopupMenu前设置的
      

  4.   

    OnUpdateTreeAddCommunity到底是在什么时候执行啊?
      

  5.   

    我是在TrackPopupMenu前设置的,具体程序如下
    void CNodeTreeView::OnUpdateTreeAddCommunity(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
          if(m_bCommunityMenu)//菜单项的状态变量
             pCmdUI->Enable(true);
          else
    pCmdUI->Enable(false);
    }
    在TrackPopupMenu前设置bCommunityMenu的值
      

  6.   

    我给出的代码是可以的,这是我一个项目中的代码。
    OnUpdateTreeAddCommunity 是在 m_bCommunityMenu的值发生变化时调用,消息映射中添加
    ON_UPDATE_COMMAND_UI(ID_MENU_ENABLE, OnUpdateTreeAddCommunity )
      

  7.   

    OnUpdateTreeAddCommunity 是在 m_bCommunityMenu的值发生变化时调用?m_bCommunityMenu是我自己定义的一个菜单项的状态变量,他的改变怎么会触发OnUpdateTreeAddCommunity 呢?其实我想实现的就是让弹出菜单的某些项是灰的,当然哪些是灰的得由我控制
      

  8.   

    变灰也使用这个函数的pPopup->CheckMenuItem(ID_MENU_ENABLE_FILE,MF_GRAY | MF_BYCOMMAND);具体参看msdn把
    怎么会触发OnUpdateTreeAddCommunity参看doc-view的一些例子把,这是微软的一种机制,我就不解释了
      

  9.   

    可以用EnableMenuItem(ID_TREE_ADD_PART,MF_BYCOMMAND|MF_ENABLED)解决,谢谢啦:-)