给公司做了一个消息广播,就是右下角挪出一个窗体的程序,基本做好,但是最头痛的和不方便的问题就是,这个窗体挪出来的时候会占焦点,这样,对于工作的人来说很垃圾,如何让这个窗体不抢焦点?求高手帮忙,据说要用hook,但是没弄懂,还请高手帮忙,就是在实例化窗体的时候,焦点就被抢掉

解决方案 »

  1.   

    应该是枪掉WM_SETFOCUS这个消息
    SetWindowsHookEx中HOOK安装WH_CALLWNDPROC钩子,勾掉WM_SETFOCUS就可以了应该
      

  2.   


    这样可以吗?Form2: Activated事件里这么写    public event EventHandler<EventArgs> FormActivated;
        private bool IsFocus = false;
        private void Form2_Activated(object sender, EventArgs e)
        {
          if (!IsFocus)
          {
            if (FormActivated != null)
            {
              FormActivated(this, e);
              IsFocus = true;
            }
          }
        }
    Form1: Form1调用Form2,Form2得到焦点马上转移焦点    private void button3_Click(object sender, EventArgs e)
        {
          Form2 f = new Form2();
          f.FormActivated += new EventHandler<EventArgs>(f_FormActivated);
          f.Show();
        }    void f_FormActivated(object sender, EventArgs e)
        {
          this.Activate(); //当Form2得到焦点后马上转移到Form1
        }
      

  3.   

    再来个,不知道行不行,load的时候用GetForegroundWindow获得当前焦点窗口句柄
    窗口弹出来后再对原窗口PostMessage 发送WM_SETFOUCUS消息,这个应该简单点