我用ON_COMMAND_RANGE,在DEBUG下运行很正常,可是在RELEASE却总是出错,函数里什么都不写都有错。
请高手指点。

解决方案 »

  1.   

    我就在三个地方用过的:
    1.在消息映射中:
    ON_COMMAND_RANGE(IDC_CLIENT0,IDC_CLIENT5,OnClient)
    (IDC_CLIENT0,IDC_CLIENT5中间有六个ID,并且他们都是相邻的)
    2.在头文件定义中:
    afx_msg void OnClient();
    3.函数体:
    void OnClient()
    函数体里面什么都不写,都有错误。
      

  2.   

    1。ON_COMMAND_RANGE(IDC_CLIENT0,IDC_CLIENT5,OnClient)的声明应该放在{{//...的外面。
    2。afx_msg void OnClient(UINT nID ),瞧,需要带个参数,没有参数怎么知道是那个命令调用它的呢!!!
    你瞧你的是不是这样!
      

  3.   

    谢谢agui79
    1.我的确是放在里面,可是有什么分别呢?
    2.为什么OnClient(UINT nID )要带个参数呀,直接的COMMAND命令呀,鼠标点击按纽的操作,我要带什么参数呢?
      

  4.   

    agui79,我只把第2个问题解决了,在OnClient(UINT nID )中加了个参数,函数体里没管它,竟然执行对了,没有什么错误了。可是我还是不明白为什么release下非要这个没起作用的参数呢?而debug下却可以不要这个参数?
    我以为release和debug只在内存管理上有不同
      

  5.   

    UINT nID 
    nID指响应消息的ID号,以方便同一消息,对不同的ID,有不同的处理。
    你不带参数,它怎么知道是哪一个控件该响应消息呢?
      

  6.   

    不带参数,就象是一般的COMMAND消息啊,响应按纽操作呀,ON_COMMAND_RANGE(IDC_CLIENT0,IDC_CLIENT5,OnClient)中不是已经指明了是哪个控件响应消息吗?
      

  7.   

    首先,ClassWizard自己不支持ON_COMMAND_RANGE,所以你在ClassWizard中找不到该消息,它只支持ON_COMMAND,所以你自己添加的时候不要放在那个里面。请看原话:ClassWizard does not support message map ranges, so you must place the macro yourself. Be sure to put it outside the message map //{{AFX_MSG_MAP delimiters.其次:为什么要参数那就有很大的作用。譬如说,我想用户点击IDC_CLIENT0时会显示1,点IDC_CLIENT1时显示2....,如果没有参数那该怎么办呢?所以这时就可通过参数来判断这时这函数是由哪个命令所调用。即使你不需要辨别是那个命令所调用,但是参数仍然需要,这就是MFC所规定的。
      

  8.   

    我看你还有点弄糊涂了。
    ON_COMMAND_RANGE(IDC_CLIENT0,IDC_CLIENT5,OnClient)是知道是那个调用阿,但你函数里面你怎么写,你靠什么来判断???想过没有??
      

  9.   

    原来我用const MSG* pMsg = GetCurrentMessage()来得到消息,通过消息中的参数得到的ID,怪不得我半天摸不着头脑!