代码之家  ›  专栏  ›  技术社区  ›  Ondrej Slinták

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

  •  3
  • Ondrej Slinták  · 技术社区  · 16 年前

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

    据我所知,没有最小化事件,我可以使用resize,但我不知道如何检测我是否单击了最小化按钮。我试着用 if ( WindowState = FormWindowState.Minimized ) { ... } ,但这仍然会生成动画并在之后触发代码。

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

    1 回复  |  直到 13 年前
        1
  •  5
  •   Community Mohan Dere    8 年前

    这是可行的,但它在任务栏按钮上有一个令人不快的副作用。我想不出另一种方法,甚至无法从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属性pinvoking dwmsetwindowattribute()可以禁用Aero上的动画。见 this answer .