2013-07-09 52 views
-1

所有,的winform没有获得焦点

我只想做一个WinForm,可以覆盖所有的屏幕,它不能获得焦点。但它仍然保持在屏幕的顶部。这意味着用户也可以用这个最顶级的winform来完成其他操作。

尽管如此。感谢大家!

+0

到目前为止,你有尝试过什么吗?请阅读[常见问题]和[问] –

+0

我尝试了最高层和createparams。他们不是我想要的,我仍然在想办法解决这个问题! –

回答

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,特别是在以低视角观看时,我可以更清晰地看到图像。太好了。

+0

谢谢,我会尝试。 –

+0

谢谢它运作良好!!!!! –

+0

@KeqinDou不客气。如果有帮助,请点击(1次)投票号码下面的勾号来接受我的回答:) –

0

将表单的TopMost属性设置为true。即使其他窗体或窗户有焦点,这也会使窗体保持最佳状态。如果创建新的TopMost表单,它们将覆盖最后一个。

myForm.TopMost = True;

如果你不希望窗口点击你,可能需要点击进入GDI +或DX。

但是你也可以试验SetWindowLongPtr函数来设置窗口的属性。 Here's a link给某个似乎已经完成了你的事情的人。

+0

感谢您的回复。但这样,如果我点击表单,它将获得焦点。当我点击它时,我不希望它成为焦点。 –

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(); 
    } 

和方式,如果次要形式得到关注它送人主表单

+0

感谢您的帮助。但我只想在所有屏幕上制作一个模糊的封面,用户仍然可以执行操作。这种方式我认为可以把重点放在指出的形式或过程上,但不是我想要的。 –

+0

请给我更多的信息。当你说“在所有屏幕上模糊遮罩并且用户仍然可以做它们的操作”时,你是什么意思 –

+0

这意味着我只想在所有屏幕上添加一个遮罩,用户将看到原始的Windows内容并产生一些模糊效果他们仍然可以在原有的窗户上完成自己的操作。换句话说,原始内容(Windows桌面或其他)将是一个图层,我添加的封面是另一个图层。用户可以在这两个图层之间移动鼠标,当他们点击或完成其他操作时,内容层不在我添加的封面上。谢谢!这足够清楚了吗? –