2010-12-19 31 views
1

我想重寫最小化控制,而不是將窗口發送到任務欄,它會做我曾經寫過的任務。如何覆蓋最小化控件?

Basicly這就是我希望我的新的最小化和恢復的效果是:

private void ChangeForm(object sender, EventArgs e) 
    { 
     if (this.WindowState == FormWindowState.Minimized) 
     { 
      this.Height = 80; 
      iDebug.Visible = false; 
      mainMenu.Visible = false; 
     } 
     else 
     { 
      this.Height = 359; 
      iDebug.Visible = true; 
      mainMenu.Visible = true; 
     } 
    } 

我曾經試圖開槍調整大小事件要做到這一點,但沒有成功

this.Resize += new EventHandler(ChangeForm); 

回答

5

Cancel A WinForm Minimize?


剛剛經過測試,它會使窗體100像素當點擊最小化而沒有閃爍時,它更短。

private const int WM_SYSCOMMAND = 0x0112; 
private const int SC_MINIMIZE = 0xf020; 

protected override void WndProc(ref Message m) { 
    if (m.Msg == WM_SYSCOMMAND) { 
     if (m.WParam.ToInt32() == SC_MINIMIZE) { 
      m.Result = IntPtr.Zero; 
      Height -= 100; 
      return; 
     } 
    } 
    base.WndProc(ref m); 
} 
+0

謝謝,但這並不能防止窗口最小化它將最小化和恢復從我undestood和測試。我想要的是當用戶單擊應該使窗口最小化的減號按鈕時具有我自己的功能。 – Prix 2010-12-19 21:42:09

+0

檢查其他答案,談論重寫WndProc取消最小化。然後你可以在那之後運行你的自定義代碼。 – 2010-12-19 21:46:57

+0

感謝忽略了由於正確的anwser beign標記。 – Prix 2010-12-19 21:51:44

3

最小化命令對用戶有一個非常明確的含義,不應該混淆。因此Winforms沒有它的事件。但不是真正的問題,你可以通過覆蓋WndProc()來檢測任何Windows消息。像tihs:

private void OnMinimize() { 
     this.Close(); // Do your stuff 
    } 
    protected override void WndProc(ref Message m) { 
     // Trap WM_SYSCOMMAND, SC_MINIMIZE 
     if (m.Msg == 0x112 && m.WParam.ToInt32() == 0xf020) { 
      OnMinimize(); 
      return;  // NOTE: delete if you still want the default behavior 
     } 
     base.WndProc(ref m); 
    }