2010-02-02 96 views
3

當我點擊我的Windows窗體應用程序中的最小化按鈕時,我不希望它執行經典的Windows最小化動畫(窗口將下降到任務欄)。在最小化/恢復窗口時是否可以禁用動畫?

據我所知,沒有最小化事件,我只能使用調整大小,但我不知道如何檢測我是否點擊最小化按鈕。我試圖使用if (WindowState = FormWindowState.Minimized) { ... },但是它會動畫,並在後面觸發代碼。

有沒有什麼辦法檢測最小化按鈕點擊?有什麼辦法可以禁用動畫或者是由Windows設置觸發的嗎?

回答

5

這可以工作,但它在任務欄按鈕上有不愉快的副作用。我想不出另一種方式,甚至無法從SystemParametersInfo()訪問動畫。

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
    } 
    protected override void WndProc(ref Message m) { 
     // Catch WM_SYSCOMMAND, SC_MINIMIZE 
     if (m.Msg == 0x112 && m.WParam.ToInt32() == 0xf020) { 
      this.Hide(); 
      this.WindowState = FormWindowState.Minimized; 
      this.BeginInvoke(new Action(() => this.Show())); 
      return; 
     } 
     base.WndProc(ref m); 
    } 
} 

更新:上的Aero禁用動畫可以通過與DWMWA_TRANSITIONS_FORCEDISABLED屬性pinvoking DwmSetWindowAttribute()。見this answer

+1

這實際上正是我要找的。我甚至不介意副作用,因爲我將我的應用程序最小化爲托盤。謝謝! – 2010-02-04 14:52:10

+3

如果這是一個托盤圖標窗口,更好的方法是隱藏最小化按鈕。它只是混淆了用戶。讓用戶關閉窗體,在FormClosing事件處理程序中調用Hide()。 – 2010-02-04 15:16:42

相關問題