所有
我只想制作一个可以覆盖所有屏幕的winform,它无法获得焦点。但它仍然保持在屏幕的顶部。这意味着用户也可以使用这个最顶级的winform进行其他操作。
任何事情。谢谢你们所有人!
答案 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
,特别是在低视角观看时,我可以更清晰地看到图像。那太好了。