2011-11-04 92 views
0

我试图在启动时启动窗体,并将它作为我的应用程序的整个运行时间保持为背景。基本上我想隐藏所有的桌面图标,并有一个空白的背景。此外,当用户点击某些按钮时,我希望BackColor的形式发生变化。winforms桌面上的窗口/最底部的窗口

我搜查了一堆,我一直找到一半的解决方案。这里是我到目前为止已经试过:

创建会取代的WndProc事件BackBaseForm,如果它WM_WINDOWPOSCHANGING,我不叫base.WndProc(ref m),而是发送以下信息:

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

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

回答

0

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

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

将有许多表单从几个不同的程序集启动,这将工作吗? – user1030064

+0

只要所有的窗口都在同一个进程中,哪个程序集的窗体都是无关紧要的。即使在不同的进程中,您也应该可以做到这一点,但您需要使用一些较低级别的Win32 API调用。 –

0

frmBackground.Enabled设置为false。

在你的MainForm:

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中,我不确定其他版本)。无论哪种方式,将启用设置为false将工作。但是当你点击背景表单时,你会听到一声蜂鸣,这可能很烦人。可能有某种方法可以阻止它。