最小化/恢复窗口时是否可以禁用动画?

时间:2010-02-02 16:32:18

标签: c# .net winforms events

当我在Windows窗体应用程序中单击最小化按钮时,我不希望它执行经典的Windows最小化动画(窗口转到任务栏)。

据我所知,没有Minimize事件,我可以使用Resize,但我不知道如何检测我是否点击了最小化按钮。我尝试使用if ( WindowState = FormWindowState.Minimized ) { ... },但无论如何都会动画并触发代码。

有没有办法检测最小化按钮点击?有没有办法禁用动画,还是由Windows设置触发?

1 个答案:

答案 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