不要用无模式对话框。

解决方案 »

  1.   

    1)用非模态的
    2)用线程
    3)看看这个
    BCB_FANS(四大名捕之追杀令)
    当MessageBox对话框显示的时候,主窗口将失去焦点,知道了这一点,问题就很简单了。下面是我的C++Builder代码。//替换主窗口的窗口过程(我不知道VC怎样办到这一点,反正原理就是这样)void __fastcall TForm1::WndProc(Messages::TMessage &Message)
    {
      TForm::WndProc(Message);  //失去焦点之前
      if(Message.Msg == WM_NCACTIVATE)
      {
      }
      //失去焦点之后
      else if(Message.Msg == WM_ACTIVATE)
      {
        if(LOWORD(Message.WParam) == WA_INACTIVE)
        {
          HWND hWnd;
          char ClassBuf[64];      hWnd = (HWND)Message.LParam;
          GetClassName(hWnd,ClassBuf,sizeof(ClassBuf));      //首先判断是否是MessageBox对话框,
          if(AnsiString(ClassBuf) == "#32770")
          {
            //再判断这个窗口是否是本身程序的窗口(因为别的程序弹出窗口时,你的主窗口也同样失去焦点)
            DWORD dwProcessID;
            
            GetWindowThreadProcessId(hWnd,&dwProcessID);
            
            if(dwProcessID == GetCurrentProcessId())
            {
              //移动窗口的位置
              MoveWindow(.......);//或者调用 SetWindowPos(...)
              
              //替换左边的标题栏图标(如果有的话)
              SetClassLong(hWnd,GCL_HICON,(long)Image1->Picture->Icon->Handle);          //重新设置按钮的文本(比如把确定改为“OK 007”)
              HWND hTemp;          hTemp = GetDlgItem(hWnd,1);
              SetWindowText(hTemp,"New Text For Button");          //.........其他操作
            }
          }
        }
      }
    }