0

我试图在启动时启动一个表单,并让它在我的应用程序运行的整个过程中一直作为背景。本质上,我想隐藏所有桌面图标并拥有空白背景。此外,当用户单击某些按钮时,我希望表单 BackColor 发生变化。

我搜索了一堆,我一直在寻找一半的解决方案。这是我迄今为止尝试过的:

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

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

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

4

2 回答 2

0

设置frmBackground.Enabled为假。

在您的主窗体中:

    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 都可以。但是当您单击背景表单时会发出哔哔声,这可能很烦人。可能有一些方法可以防止它。

于 2011-11-04T18:34:19.267 回答
0

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

frmBackground backgroundForm = new frmBackground();
frmMain mainForm = new frmMain();
mainForm.Owner = backgroundForm;
backgroundForm.Show();
mainForm.Show();
于 2011-11-04T16:45:31.257 回答