菜单根据配置文件动态生成,
CMenu menu;
menu.CreatePopupMenu();
//读配置文件,循环添加所有菜单项
for(;;){
menu.AppendMenu(MF_STRING,IDM_ID_??,"??");
}
menu.TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,rc.left, rc.bottom, this, &rc);
menu.DestroyMenu();
问题是:我怎么解决菜单项的响应问题?

解决方案 »

  1.   

    MFC确定一个Command ID是否有Handler与之对应是通过调用OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 然后根据返回值来确定的。返回值为true, 表示有对应的处理函数,返回值为false,表示没有。
      

  2.   

    你可以处理WM_COMMAND消息来处理菜单命令。
      

  3.   

    菜单ID不可预料?有点玄在WindowProc虚函数里处理WM_COMMAND
    截获菜单ID
    响应之
      

  4.   

    val = menu.TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,rc.left, rc.bottom, this, &rc);  MSDN上写的是BOOL 其实返回的就是菜单ID,如果失败的话才返回空
    所以之后可以加
    switch(val)
    {
      case ID_... 就是你读配置文件添加的那些
       你要进行处理的函数!
       break;}