winforms桌面/最底层窗口

时间:2011-11-04 16:36:02

标签: c# winforms winforms-interop

我正在尝试在启动时启动一个表单,并将其作为我的应用程序的整个运行时间的背景。基本上我想隐藏所有桌面图标并具有空白背景。此外,当用户单击某些按钮时,我希望更改表单BackColor。

我搜索了一堆,我一直找到一半的解决方案。这是我到目前为止所尝试的:

创建了一个覆盖WndProc事件的BackBaseForm,如果它是WM_WINDOWPOSCHANGING,我不会调用base.WndProc(ref m)而是发送以下消息:

SetWindowPos(Handle, new IntPtr(1), 0, 0, this.width, this.height, SWP_NOZORDER);

然而,每当我点击表格时,它仍会将其带到前面。我还尝试创建一个WINDOWPOS结构,编组指向结构的指针,然后修改结构。我认为这不会改变消息中的实际lParam

2 个答案:

答案 0 :(得分:0)

创建背景表单并将“主”表单的所有者表单设置为该背景表单。例如:

frmBackground backgroundForm = new frmBackground();
frmMain mainForm = new frmMain();
mainForm.Owner = backgroundForm;
backgroundForm.Show();
mainForm.Show();

答案 1 :(得分:0)

frmBackground.Enabled设为false。

在你的主体中:

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        var bg = new Form();
        bg.WindowState = FormWindowState.Maximized;
        bg.ShowInTaskbar = false;
        bg.FormBorderStyle = FormBorderStyle.None;
        bg.Show();
        bg.Enabled = false;
        this.Owner = bg; // optional - see below
    }

如果你这样做:

this.Owner = f; 

然后当您单击背景表单时,您的主表单边框将闪烁(至少在Windows 7中,我不确定其他版本)。无论哪种方式,将Enabled设置为false都可以。但是当你点击背景表格时,你会发出一声哔哔声,这可能很烦人。可能有一些方法可以阻止它。