我有一个非常简单的winforms应用程序,只有这个内部:
public partial class Form1 : Form
{
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var info = new ProcessStartInfo { FileName = "cmd.exe", UseShellExecute = true };
var process = Process.Start(info);
Thread.Sleep(500);
SetParent(process.MainWindowHandle, this.Handle);
}
}
现在,我需要制作它,以便Form1内部的所有内容根本无法获得任何焦点。我想过对内部的所有内容进行透明控制,但之后控件会获得焦点。此外,我不知道我将使用哪个控件以及如何在Form1内的所有内容之上获得此透明控件。
有没有人对如何解决这个问题有任何想法?
答案 0 :(得分:0)
您可以创建自己的Panel
子类(NonFocusablePanel
)并执行以下操作:
class NonFocusablePanel : Panel
{
static readonly uint WM_SETFOCUS = 0x0007;
protected override void WndProc(ref Message msg)
{
// Ignore focus
if(msg.Msg == WM_SETFOCUS)
return;
base.WndProc(ref msg);
}
}
然后将此面板放在Form
上,Dock
设置为Fill
(BackColor
为Transparent
)。
在Form_Load
上,您最初可以隐藏它并将其隐藏在前面(ZIndex
),因此它位于所有其他控件之上:
panel.Hide();
panel.BringToFront();
然后当你想要展示它时......
panel.Show();