我想做一个菜单,事先不知到这个菜单将会有多少项,也就是无法定义id,程序运行时根据需要自动扩展
然后选中哪个菜单项就将菜单上的文字用对话框弹出来,请问能否实现!

解决方案 »

  1.   

    可以:
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDC_ABOUT, "关于1");
    pSysMenu->AppendMenu(MF_STRING, IDC_ABOUT+1, "关于2");
    pSysMenu->AppendMenu(MF_STRING, IDC_ABOUT+2, "关于3");
    pSysMenu->AppendMenu(MF_STRING, IDC_ABOUT+3, "关于4");}
    OnCommand(UINT nID, LPARAM lParam)
    {
     if( nID == IDC_ABOUT) MessageBox( "ABOUT1" );
     if( nID == IDC_ABOUT+1) MessageBox( "ABOUT2" );
     if( nID == IDC_ABOUT+2) MessageBox( "ABOUT3" );
     if( nID == IDC_ABOUT+3) MessageBox( "ABOUT4" );
    ...
      

  2.   

    我从一本书上找到了答案。
    #define USE_MSG_1   1001
    手工添加
    //cpp
    ON_COMMAND_RANGE(USE_MSG_1,USE_MSG_1+100,OnMenuSelect)
    ON_UPDATE_COMMAND_UI_RANGE (USE_MSG_1,USE_MSG_1+100,OnupdateMenu)
    //.h
    afx_msg void OnMenuSelect(UINT nID);
    afx_msg void OnupdateMenu(CCmdUI *pCmdUI);
    结果主窗口就能收到一个1001+X的值了,很好用
      

  3.   

    我正在做这样的一个练习,遇到这样的问题:
    关于 BOOL InsertMenu(UINT nPosition,UINT nFlags,
             UINT nIDNewItem=0,LPCTSTR lpszNewItem=NULL);
    的用法
    这个函数本来有三中用法吧,其中两种都无问题,问题出在这一种
    MyMenu.InsetMenu(ID_1,MF_BYCOMMAND | MF_POPUP, (UINT)subMenu.m_hMenu,"子菜单");
    Ddbug Assertion Faile
    我是跟着书本上的练习做的,就是这么一条语句出问题,请指教
      

  4.   

    标记字写的不对吧,你看看msdn