我在对话框中设置某个属性后,我想在这个EDITBOX失去焦点的时候判断用户输入数据的合法性,并给出提示。于是我加了个EN_KILLFOCUS处理函数进行处理。但是,当输入一个非法数据后点击对话框的“取消”按钮时会先执行KILLFOCUS函数(这是我不希望的),请问有什么办法在这个时候不执行KILLFOCUS函数??

解决方案 »

  1.   

    KillFocus在OnCancel之前所以你不知道它KillFocus后做的什么操作
      

  2.   

    楼上的“所以你不知道它KillFocus后做的什么操作”是什么意思啊?KILLFOCUS是在OnCalcel之前,我只是想别执行KillFocus直接执行OnCalcel.或者说在KillFocus中判断出来这时是点击的Cancel按钮而不做其他工作。
      

  3.   

    还是在EN_CHANGE中来判断比较好。
      

  4.   

    是否可以通过判断鼠标位置来取消KillFocus在cancel按钮rect时的处理?
      

  5.   

    可以在EN_KILLFOCUS处理函数中设置一个定时器,延迟0.1秒左右后再开始进行数据合法性检查。
      

  6.   

    在EN_CHANGE中判断也有坏处的
    比如我的EDITBOX需要输入整数,但是输入“-”肯定应该是不合法的,但是“-1”却是合法的。那么当输入“-”的时候应该认为它合法还是不合法呢?其实这样的例子很多,当一个合法数据的前半部分是不合法的时候就有不太好处理了。Snow_Ice11111(雪上加冰)兄的做法比较有创意,似乎可以解决问题。
    但是如果这样做,当用户确认的时候也得不到合法检查了,当然如果让确认操作也延迟一下也可以解决问题。  问题是,当你把鼠标点在“Cancel”上却犹豫了一下,这时候“可怕的事情”就发生了!!  是否可以在OnTime中判断焦点是否在“Cancel”上,然后选择性进行处理??!!
    其实我不太喜欢用定时器,我觉得对话框中搞那么多定时器始终不太好,至少调试的时候不太爽。有不有其他办法解决这个问题???
      

  7.   

    在EN_CHANGE中判断的是整体而不是一个字符。
      

  8.   

    不错,判断的是一个整体,但是,输入的时候不是一个整体进行输入的啊。
    就比如“-1”吧。
    首先要输入‘-’吧,这时候产生了一个EN_CHANGE消息。需要判断“-”是否合法,因为这时候“-”就是整体。
    然后才输入‘1’,这时候又产生了一个EN_CHANGE消息。这时才判断“-1”是否合法。
    所以,第一次判断的结果是不合法。第二次判断的结果才是合法。
      

  9.   

    看看下面的代码,应该对你有帮助:
    void CResizeObjDlg::OnKillfocusEditNewx() 
    {
    if(CWnd::GetFocus()==this)
    {
    return;
    }
    if(CWnd::GetFocus()==GetDlgItem(IDCANCEL)){
    return;
    }
    if(UpdateData(TRUE))
        {
       ........
    }
    UpdateData(FALSE);
    }
      

  10.   

    多谢楼上的!!我一直以为,在EDITBOX  killfocus后,CANCEL按钮才获得焦点。原来在在产生EN_KILLFOCUS的时候CANCEL按钮已经获得焦点了。  
    哎,我ZTMD是猪头一个。