我希望根据一个编辑框的内容动态的改变菜单的某项的名字 (菜单是我自己创建的)代码如下:
CMenu*   mmenu   =   GetMenu();   
CMenu*   submenu1   =   mmenu->GetSubMenu(2);  
 submenu1->ModifyMenu(1,MF_BYPOSITION,0,str);
str是要修改成的名字。
结果发现 名字是改变了,但是原来可以点击这项弹出个对话框,现在也不行了,点击没反应了,求那位大侠给解答一下把 。

解决方案 »

  1.   

    ModifyMenu,你把Id改成0了,原先的响应函数不起作用,用mf_bycommand参数修改.
      

  2.   

    回复youyifang
    我把参数改成mf_bycommand,就修改不了名字了 我刚才试过
      

  3.   

    你的菜单项的ID是多少,知道不?
    用mf_bycommand,要用ID来关联的.
      

  4.   

    你响应函数的地方也要用到ID的,
    或者你把那个id替换你的语句里面的第3个参数.
      

  5.   


    void CMainFrame::OnChangeFileMenu() 
    {
       // Get the menu from the application window.
       CMenu* mmenu = GetMenu();   // Look for "File" menu.
       int pos = FindMenuItem(mmenu, _T("&File"));
       if (pos == -1)
          return;   // Remove "New" menu item from the File menu.
       CMenu* submenu = mmenu->GetSubMenu(pos);
       pos = FindMenuItem(submenu, _T("&New\tCtrl+N"));
       if (pos > -1)
          submenu->RemoveMenu(pos, MF_BYPOSITION);   // Look for "Open" menu item from the File menu. Insert a new
       // menu item called "Close" right after the "Open" menu item.
       // ID_CLOSEFILE is the command id for the "Close" menu item.
       pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
       if (pos > -1)
          submenu->InsertMenu(pos + 1, MF_BYPOSITION, ID_CLOSEFILE, _T("&Close"));   // Rename menu item "Exit" to "Exit Application".
       pos = FindMenuItem(submenu, _T("E&xit"));
       if (pos > -1)
       {
          UINT id = submenu->GetMenuItemID(pos);
          submenu->ModifyMenu(id, MF_BYCOMMAND, id, _T("E&xit Application"));
       }   // Associate a context help ID with File menu, if one is not found.
       // ID_FILE_CONTEXT_HELPID is the context help ID for the File menu
       // that is defined in resource file. 
       if (submenu->GetMenuContextHelpId() == 0)
          submenu->SetMenuContextHelpId(ID_FILE_CONTEXT_HELPID);   // Set "Open" menu item as the default menu item for the File menu, 
       // if one is not found. So, when a user double-clicks the File
       // menu, the system sends a command message to the menu's owner 
       // window and closes the menu as if the File\Open command item had 
       // been chosen. 
       if (submenu->GetDefaultItem(GMDI_GOINTOPOPUPS, TRUE) == -1)
       {
          pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
          submenu->SetDefaultItem(pos, TRUE);
       }
    }// FindMenuItem() will find a menu item string from the specified
    // popup menu and returns its position (0-based) in the specified 
    // popup menu. It returns -1 if no such menu item string is found.
    int FindMenuItem(CMenu* Menu, LPCTSTR MenuString)
    {
       ASSERT(Menu);
       ASSERT(::IsMenu(Menu->GetSafeHmenu()));   int count = Menu->GetMenuItemCount();
       for (int i = 0; i < count; i++)
       {
          CString str;
          if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
             str.Compare(MenuString) == 0)
             return i;
       }   return -1;
    }这里有个例子,你参考下.
      

  6.   

     submenu1->ModifyMenu(1,MF_BYPOSITION,0,str);
    改为: submenu1->ModifyMenu(1,MF_BYPOSITION,ITEM1_ID,str);
    其中这个ITEM1_ID, 对应你的菜单项1的ID号。