我要做一个动态添加的菜单,就像VC6的[窗口]菜单一样,但是没有固定的菜单项,全是动态添加的.
本来很简单的事,资源里放个空菜单,运行时AppendMenu就行.
但是,VC6的资源编辑器,只要一保存,这个空菜单就变成一个菜单项.怎么搞的!
我只好在菜单中添加一个分隔符,运行时先删掉分隔符再添加新的菜单项.
问题虽然解决了,总是看着不爽.问问大家,怎么才能把空菜单加到资源里?

解决方案 »

  1.   

    class CDynamicMenuDlg : public CDialog
    {
    ...
    CMenu menu;
    ...
    }//从数据库中加载菜单
    void CDynamicMenuDlg::LoadMenuFromDatabase()
    { CString sql;
    sql.Format( "select * from tb_menuinfo where 上级菜单 is NULL");
    m_pRecord = m_pCon->Execute((_bstr_t)sql,NULL,adCmdText);
    CMenu m_menu;

    CString c_menustr;
    while (! m_pRecord->ADOEOF)
    {
    c_menustr = m_pRecord->GetCollect("菜单名称").bstrVal;
    //menu.AppendMenu(MF_STRING,-1,c_menustr);
    LoadSubMenu(&menu,c_menustr);
    m_pRecord->MoveNext();
    }
    SetMenu(&menu);
    }
      

  2.   

    空菜单 直接 CreatePopupMenu 好了
       CMenu MainTPMMenu;
       CMenu MiscFruitMenu;   MainTPMMenu.CreatePopupMenu();
       MainTPMMenu.AppendMenu(MF_STRING | MF_ENABLED, 42, "Apples");
       MainTPMMenu.AppendMenu(MF_STRING | MF_ENABLED, 43, "Pears");
       MainTPMMenu.AppendMenu(MF_STRING | MF_ENABLED, 43, "Grapes");
       MiscFruitMenu.CreatePopupMenu();
       MiscFruitMenu.AppendMenu(MF_STRING | MF_ENABLED, 40, "Mangos");
       MiscFruitMenu.AppendMenu(MF_STRING | MF_ENABLED, 41, "Tomatoes");
       MainTPMMenu.AppendMenu(MF_STRING | MF_POPUP | MF_ENABLED,
                              (UINT)MiscFruitMenu.m_hMenu,
                              "Other Misc. Fruit");
       MainTPMMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x,
                                  pt.y, this, NULL);
      

  3.   

    介是俺写的俩用VS2010添加菜单的文字,你可以看看,应该能帮助你http://www.cnblogs.com/52yixin/articles/2105851.htmlhttp://www.cnblogs.com/52yixin/articles/2125612.html
      

  4.   

    唉,全是答非所问的.
    我的资源里有一个菜单,其中有一个子菜单叫[设备],有没有可用的设备,有几个设备,是运行时才知道的,所以编辑菜单时应该[设备]底下是没有菜单项的,也就是个空的弹出菜单.但是VC6似乎不允许这种做法,他自作主张把[设备]改成一个菜单项.我就是要问,怎么样使[设备]这个弹出菜单原样保存在资源里?至于CreatePopupMenu拉,我不知道啊?就是嫌她烦.某个仁兄还整出了sql...你们费劲回答了半天,我的问题还是没解决,我该给不给你分呢?发点牢骚,莫怪.