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

Ond*_*ták 3 .net c# events winforms

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

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

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

Han*_*ant 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:通过使用DWMWA_TRANSITIONS_FORCEDISABLED属性对DwmSetWindowAttribute()进行设置,可以在Aero上禁用动画.看到这个答案.

  • 如果这是托盘图标窗口,更好的方法是隐藏最小化按钮.它只是让用户感到困惑.让用户关闭表单,在FormClosing事件处理程序中调用Hide(). (3认同)