2010-12-19 33 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); 
    }