winform没有得到关注

时间:2013-07-09 06:05:50

标签: c# winforms focus

所有

我只想制作一个可以覆盖所有屏幕的winform,它无法获得焦点。但它仍然保持在屏幕的顶部。这意味着用户也可以使用这个最顶级的winform进行其他操作。

任何事情。谢谢你们所有人!

3 个答案:

答案 0 :(得分:0)

将表单的TopMost属性设置为true。即使其他表单或窗口具有焦点,这也将使表单保持在顶部。如果创建了新的TopMost表单,它们将覆盖最后一个。

myForm.TopMost = True;

如果您不希望窗口让您点击,则可能需要使用GDI +或DX。

但您也可以尝试SetWindowLongPtr功能来设置窗口的属性。 Here's a link给那些似乎已经完成了你所追求的人。

答案 1 :(得分:0)

正如tophe所说

public Form1()
  {
     InitializeComponent();
     TopMost = true;
  }

将表格保持在最顶层。 为了你的焦点

private Form masterForm;
  public Form2(Form master)
  {
     masterForm = master;
     InitializeComponent();
     GotFocus += new EventHandler(Form2_GotFocus);
  }

  void Form2_GotFocus(object sender, EventArgs e)
  {
     masterForm.Focus();
  }

并且如果辅助表单获得焦点,则将其提供给主表单

答案 2 :(得分:0)

我认为这就是你想要的:

public class Form1 : Form {
  [DllImport("user32")]
  private static extern bool SetLayeredWindowAttributes(IntPtr hwnd, int crKey, byte alpha, int flags);
  public Form1(){
     InitializeComponent();
     Load += (s,e) => {
       TopMost = true;
       FormBorderStyle = FormBorderStyle.None;
       WindowState = FormWindowState.Maximized;
       ShowInTaskbar = false;
       SetOpacity(50);//try this to see it in action :)
     };
  }
  protected override CreateParams CreateParams {
      get {
           CreateParams cp = base.CreateParams;
           cp.ExStyle |= 0x20 | 0x80000;   // WS_EX_TRANSPARENT and WS_EX_LAYERED
           return cp;
      }
  }
  //This is called to set your form opacity, by default (after applying above ex-styles) the opacity is 0.
  public void SetOpacity(byte opacity){
      SetLayeredWindowAttributes(Handle, 0, opacity, 0x2);//LWA_ALPHA = 0x2
  }
  public void DecorateForm(){
     //Your code to decorate form...
  }
}

上面的代码是创建某种Click through表单,该表单不是交互式的,但可以在其他窗口之上显示所有内容,而不会阻止用户与它们进行交互。我正在使用这种技术在我的电脑屏幕上显示faded image of my love,特别是在低视角观看时,我可以更清晰地看到图像。那太好了。