2016-08-10 43 views
2

我附上了一個關於這個問題的小例子。我怎麼能在最大化完全隱藏控制箱,儘量減少無邊界形式繪製或隱藏控制框爲無邊界形式,同時最大化和最小化

using System.Windows.Forms; 
using System.Runtime.InteropServices; 
using System.Security; 
using System.Threading; 

namespace TalkTime 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private const int WM_NCPAINT = 0x0085; 
    protected override void WndProc(ref Message m) 
    { 

     int message = m.Msg; 
     switch (m.Msg) 
     { 
      case WM_NCPAINT: 
       { 

        Thread.Sleep(100); 

        return; 
       } 
     } 
     base.WndProc(ref m); 
    } 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      CreateParams cp = base.CreateParams; 
      cp.Style |= 0x20000; 
      return cp; 
     } 
    } 
} 
} 

我把線程顯示問題出在哪裏正好。

我猜與控制箱和窗體名稱相關的黑色矩形將出現在窗體之前,而我想完全隱藏它,同時最大化和最小化。

Example

+0

無邊框形式沒有控制框。 – LarsTech

回答

1

我可以確認問題。當從最小化狀態恢復無邊框Form時,標題欄的重影在窗口的左上角顯示很短的時間。

再現問題

要重現該問題,這是不夠的FormBorderStyle屬性設置爲None創建邊界的票據,然後最小化,並在計時器恢復。通過顯示窗體並在恢復後查看窗口的左上角來啓動程序。

using System; 
using System.Windows.Forms; 
class Form1 : Form 
{ 
    public Form1() 
    { 
     var timer = new Timer() { Interval = 1000 }; 
     this.Text = "Some Text"; 
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
     timer.Tick += (x, y) => 
     { 
      if (this.WindowState != FormWindowState.Minimized) 
       this.WindowState = FormWindowState.Minimized; 
      else 
       this.WindowState = FormWindowState.Normal; 
     }; 
     timer.Start(); 
    } 
} 

解決方法

這裏是我用來去除閃爍的替代方法。將事件處理程序添加到Form1類以上並將其註冊爲Activated事件this.Activated += Form1_Activated;就足夠了。

private void Form1_Activated(object sender, EventArgs e) 
{ 
    if (this.WindowState == FormWindowState.Minimized) 
     this.Hide(); 
    this.BeginInvoke(new Action(() => 
    { 
     if (this.WindowState != FormWindowState.Minimized && !Visible) 
      this.Show(); 
    })); 
} 
+0

在我的測試中,我刪除了'CreateParams'重寫,並使用表單上的3個按鈕執行'Minimize'和'Maximize'和'Restore'。在最大化和正常狀態下最小化之後,使用任務欄將表單恢復到之前的狀態。 –

+0

我使用的CreateParams能夠使用恢復和從任務欄按鈕最小化。仍然基於你的建議,我遇到了同樣的問題。 @Reza Aghaei –

+0

我發佈了複製代碼和解決方法,您可以簡單地檢查它。 –

相關問題