孙鑫教学视频第六课关于菜单,
在用AppendMenu()动态添加菜单后,由于菜单ID未知,响应ON_COMMAND的方法是重载OnCommand();
但现在由于该菜单项没有对应的响应函数,菜单项是灰色的,我不想用“m_bAutoMenuEnable”,因为其他一些菜单项的状态还是希望由MFC自动维护。响应菜单项可以重载OnCommand(),但ON_UPDATE_COMMAND_UI的处理却是无法重载的,请问高手该如何处理,谢谢!!
(教学视频的Menu2就是这个问题,在它里面因为请四次输入创建的Menu刚好对应了几个响应函数没有删除所以表现正常,但他的程序里面第五次输入时就会出现前面所说的"菜单变灰问题")

解决方案 »

  1.   

    自己写ON_UPDATE_COMMAND_UI宏来处理,如果不会写,可以用VC随便添加一个菜单资源中菜单项的事件响应代码,然后把ID改成自己添加的菜单项ID。
      

  2.   

    AppendMenu是要求指定ID号的。
    在菜单中先增加该ID号菜单,增加ON_UPDATE_COMMAND_UI响应处理,再将该菜单项删除掉。
      

  3.   

    添加菜单项时, 可以设置一个属性"enabled/gray" ,gray就是设置成辉度的,
      msdn上有现成的例子
      

  4.   

    如果只有在运行的时候才能确定ID,就重载主窗口的OnCmdMsg函数,判断nID和(nCode==CN_UPDATE_COMMAND_UI)来处理。
      

  5.   

    感谢cnzdgs的回答,给了我很大的提示
    刚开始准备重载OnCmdMsg(),但那些奇怪的参数不知道啥意思,MSDN上的介绍也不相其他的函数那么详细,经你提醒,知道了nCode和CN_UPDATE_COMMAND_UI,查看CN_UPDATE_COMMAND_UI的定义,那后面有个注释是CCmdUI*,就试着把void *pEXtra转过去,终于解决问题啦谢谢!!