2010-02-02 2 views
3

Когда я нажимаю кнопку «Свернуть» в приложении Windows Forms, я не хочу, чтобы она выполняла классическую анимацию минимизации Windows (окно переходит на панель задач).Можно ли отключить анимацию при минимизации/восстановлении окна?

Насколько я знаю, нет события Minimize, я могу просто использовать Resize, но я не знаю, как определить, нажала ли кнопка свернуть кнопку. Я пытался использовать if (WindowState = FormWindowState.Minimized) { ... }, но это делает анимацию в любом случае и запускает код после.

Есть ли способ обнаружить кнопку смены ключа? Есть ли способ отключить анимацию или вызван настройками Windows?

ответ

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); 
    } 
} 

Update: отключение анимации на Aero можно по pinvoking DwmSetWindowAttribute() с DWMWA_TRANSITIONS_FORCEDISABLED атрибутом. См. this answer.

+1

Это на самом деле именно то, что я ищу. Я даже не возражаю против побочного эффекта, поскольку я свожу к минимуму свое приложение в лоток. Благодаря! –

+3

Если это для окна значка в трее, лучше всего скрыть кнопку «Свернуть». Это просто путает пользователя. Позвольте пользователю закрыть форму, вызовите функцию Hide() в обработчике события FormClosing. –

Смежные вопросы