当我在Windows窗体应用程序中单击最小化按钮时,我不希望它执行经典的Windows最小化动画(窗口转到任务栏)。
据我所知,没有Minimize事件,我可以使用Resize,但我不知道如何检测我是否点击了最小化按钮。我尝试使用if ( WindowState = FormWindowState.Minimized ) { ... }
,但无论如何都会动画并触发代码。
有没有办法检测最小化按钮点击?有没有办法禁用动画,还是由Windows设置触发?
答案 0 :(得分: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);
}
}
更新:通过使用DWMWA_TRANSITIONS_FORCEDISABLED属性对DwmSetWindowAttribute()进行设置,可以在Aero上禁用动画。请参阅this answer。