本帖最后由 xiaoji0507 于 2011-04-09 09:35:51 编辑

解决方案 »

  1.   

    WM_EN_KILLFOCUS(EDIT1,OnKillfocusEdit1)
    WM_EN_KILLFOCUS(EDIT1,OnKillfocusEdit2)代码写错了吧?
      

  2.   

    你想要EN_KILLFOCUS的同时也添加处理EN_SETFOCUS通知
    BOOL bEdit1 = FALSE; // 定义为成员变量
    BOOL bEdit2 = FALSE; // 定义为成员变量void CXXXDlg::OnKillfocusEdit1() 
    {
    // TODO: Add your control notification handler code here
    if(bEdit1)
    {
    bEdit1 = FALSE;
    AfxMessageBox(_T("1"));
    }
    }void CXXXDlg::OnKillfocusEdit2() 
    {
    // TODO: Add your control notification handler code here
    if(bEdit2)
    {
    bEdit2 = FALSE;
    AfxMessageBox(_T("2"));
    }
    }void CXXXDlg::OnSetfocusEdit1() 
    {
    // TODO: Add your control notification handler code here
    bEdit1 = TRUE;
    }void CXXXDlg::OnSetfocusEdit2() 
    {
    // TODO: Add your control notification handler code here
    bEdit2 = TRUE;
    }
      

  3.   


    不好意思,手误。下面一个是EDIT2。
      

  4.   

    更正一下题目中的错误:
          WM_EN_KILLFOCUS(EDIT1,OnKillfocusEdit1)
          WM_EN_KILLFOCUS(EDIT1,OnKillfocusEdit2)

          应该是ON_EN_KILLFOCUS(EDIT1,OnKillfocusEdit1)
    ON_EN_KILLFOCUS(EDIT2,OnKillfocusEdit2)
    再次谢谢大家的答复...
      

  5.   

    AfxMessageBox 会使焦点变得混乱,
    将失去焦点时的提示信息写入文件或用OutputDebugString输出看看,就正常了
      

  6.   

    这种情况下,你不能用 MessageBox() 消息框来测试,比如:你有两个Edit控件,Edit1、Edit2.
    你先把光标放到Edit1 控件里面,随便输入或者不输入,然后,移动鼠标点击Edit2 控件里面,本来,这时候,应该是响应 Edit1 控件的 OnKillfocusEdit1() 函数的,但是,你在这个响应函数里面用了MessageBox() 来弹出对话框,在这一瞬间你可以看到Edit2 控件里面的光标消失了,也就是Edit2 失去了输入焦点,这时候,系统又响应Edit2 的 OnKillfocusEdit2() 函数去了,执行完了后才回到刚才 OnKillfocusEdit1() 里面。
    这个可能是系统优先响应的问题。囧
    你可以不用MessageBox()  来测试到底响应了哪个函数,换个思路,你可以在 界面上再添加一个控件,比如 Edit3,然后在你的 Edit1、Edit2 两个控件的  OnKillfocusEditX() 函数里面,给Edit3 控件赋值,比如,在 OnKillfocusEdit1() 里面,添加代码:
    SetDlgItemInt(IDC_EDIT3,1);//表示当前的状态为Edit1 控件失去了输入焦点同样在 OnKillfocusEdit2() 里面,添加代码:
    SetDlgItemInt(IDC_EDIT3,2);//表示当前的状态为Edit2 控件失去了输入焦点这样的话,你会发现,当Edit1 失去焦点后,确实只是调用了OnKillfocusEdit1() ;而在Edit2 控件失去输入焦点后,确实只调用了 OnKillfocusEdit2()。以上纯属个人意见,如有不妥,请矫正!