2011-11-04 157 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將工作。但是當你點擊背景表單時,你會聽到一聲蜂鳴,這可能很煩人。可能有某種方法可以阻止它。