我重载了Edit control的OnKillFocus:if (invalid value)
{
   AfxMessageBox("Error");
   SetFocus();
}这个空件在modal对话框中使用没有任何问题,但用在modeless对话框中,
如果鼠标点击应用程序别的窗口的话,就会不断弹出"Error"对话框。
如果将AfxMessageBox改成::MessageBox(this-〉GetSafeHwnd, ...)
的话也要弹出三个“Error”对话框才能将焦点转到Edit控件上。MSDN说处理WM_KILLFOCUS消息的时候最好不要激活别的窗口,否则容易
死锁。我觉得好像只能设置一个定时器,延迟一段时间后再把输入焦点
转回Edit控件。不过这样做好像有点小题大作。不知道有没有好的解决方法?

解决方案 »

  1.   

    那你在SetFocus之前,
    先判断一下当前窗口是不是活动窗口不就可以了吗
      

  2.   

    BestBear(天外飞熊) ,按你的说法改了一下:if (invalid value)
    {
       ::MessageBox(this-〉GetSafeHwnd(), "Error", ....);   if (CWnd::GetActiveWindow() != this)
       {
          SetFocus();
       }
    }这样做如果是dialog only程序没问题,doc-view程序的话,
    从edit控件切换到view试图还是要点击多次OK才行。这种情况
    该如何解决?