动态增加n个菜单项,怎么知道用户点击的是哪个菜单项?
因为不知道有多少项,无法为其一一写映射函数,我想把新增的菜单都用同一个ID,只要写一个响应函数,但要做的动作根据菜单项的string而定,所以无从下手。

解决方案 »

  1.   

    比较困难,
    在WindowProc中可以处理WM_COMMAND message,LOWORD( wParam )可以判断菜单ID,而lParam为0,则很难作出判断。
      

  2.   

    The WM_COMMAND message is sent when the user selects a command item from a
    menu, when a control sends a notification message to its parent window, or
    when an accelerator keystroke is translated.WM_COMMAND
    wNotifyCode = HIWORD(wParam); // notification code
    wID = LOWORD(wParam);         // item, control, or accelerator identifier
    hwndCtl = (HWND) lParam;      // handle of control
    你可以从hwndCtl这里想想办法。
      

  3.   

    n总有个上限(设为10)吧,准备一个基础ID(设为ID_BASE),然后新增一个菜单就用ID_BASE加1
    然后手工添加消息映射
    ON_COMMAND_RANGE(ID_BASE + 1, ID_BASE + 10, OnMyCommand)消息处理函数原型为
    afx_msg void OnFileMenuItems(UINT nID);从nID - ID_BASE可以得到点击的是第几个菜单项
      

  4.   

    you can do it like this:
    #define MIN_MENU_ID xxx
    #define MAX_MENU_ID yyythen in message map add:
    ON_COMMAND_RANGE( MIN_MENU_ID, MAX_MENU_ID, YourFunction)
    void YourFunction( UNIT id)
    {
     
    }