我在用ON_COMMAND_RANGE批量响应按钮消息后,出现一个很奇怪的问题,那就是无法为新建的按钮添加消息响应函数,vc会报错?新建的按钮的ID不在ON_COMMAND_RANGE的范围内而且头文件里面的消息响应函数的声明会自动复制,添加一次,报错一次,然后再复制一次!头文件会不停的增大,多次点击后居然会达到1M多!
将ON_COMMAND_RANGE相关的头文件声明注释后,即可添加新建的按钮的消息响应函数!这是为什么?

解决方案 »

  1.   

    H头文件中加入void OnRangeCmds(UINT nID);函数的声明
    BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
       ON_COMMAND_RANGE(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3, &CChildFrame::OnRangeCmds)
    END_MESSAGE_MAP()void CChildFrame::OnRangeCmds(UINT nID)
    {
       CMenu* mmenu = AfxGetMainWnd()->GetMenu();
       CMenu* submenu = mmenu->GetSubMenu(5);
       submenu->CheckMenuRadioItem(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3, 
          nID, MF_BYCOMMAND);
    }不知道你是怎么写的
      

  2.   

    要用ON_COMMAND_RANGE的话,一定要学会手写这些宏,因为加了range之后,wizard可能会犯傻。
    我的经验,要特别注意一下头尾两个ID_COMMAND_xxx的实际值,从resource.h里面,看看你要用这个函数响应的这些命令ID是不是连续的,如果一个是200,一个是20000,那中间所有ID都会被你这个函数响应,逻辑很可能就不对了。
      

  3.   


    仔仔细细的检查过,ON_COMMAND_RANGE范围内是连续的,新建的那个按钮是ON_COMMAND_RANGE范围外的
      

  4.   

    仔仔细细的检查过,ON_COMMAND_RANGE范围内是连续的,新建的那个按钮是ON_COMMAND_RANGE范围外的你这个就天书了哈