2008-12-09 14 views
25

¿Existe un método sencillo para restaurar un formulario minimizado a su estado anterior, ya sea Normal o Maximizado? Estoy esperando la misma funcionalidad que hacer clic en la barra de tareas (o hacer clic derecho y elegir restaurar).Restaurar WindowState de Minimized

Hasta ahora, tengo esto, pero si el formulario se ha maximizado anteriormente, sigue apareciendo como una ventana normal.

if (docView.WindowState == FormWindowState.Minimized) 
    docView.WindowState = FormWindowState.Normal; 

¿Tengo que manejar el cambio de estado en el formulario para recordar el estado anterior?

Respuesta

31

uso el método siguiente extensión:

using System.Runtime.InteropServices; 

namespace System.Windows.Forms 
{ 
    public static class Extensions 
    { 
     [DllImport("user32.dll")] 
     private static extern int ShowWindow(IntPtr hWnd, uint Msg); 

     private const uint SW_RESTORE = 0x09; 

     public static void Restore(this Form form) 
     { 
      if (form.WindowState == FormWindowState.Minimized) 
      { 
       ShowWindow(form.Handle, SW_RESTORE); 
      } 
     } 
    } 
} 

luego llamar a form.Restore() en mi código.

+0

¿Alguien más ve aparecer varios íconos en la bandeja del sistema al hacer clic en la flecha^(más iconos)? Cuando pasa el mouse sobre los más, desaparecen, por lo que parece un problema de actualización de algún tipo. – MacGyver

4

Se puede simular el clic en el botón barra de tareas de la siguiente manera:

SendMessage(docView.Handle, WM_SYSCOMMAND, SC_RESTORE, 0); 
3

Para mí, el código anterior no funciona.

Pero al fin encontré el código de trabajo. Aquí está:

CxImports.ManagedWindowPlacement placement = new CxImports.ManagedWindowPlacement(); 
CxImports.GetWindowPlacement(Convert.ToUInt32(Handle.ToInt64()), placement); 

if (placement.flags == CxImports.WPF_RESTORETOMAXIMIZED) 
    WindowState = FormWindowState.Maximized; 
else 
    WindowState = FormWindowState.Normal; 

supongo, se encuentran todas las funciones necesarias "importados" por simple googlear.

11

La forma más fácil para restaurar un formulario a su estado normal es:

if (MyForm.WindowState == FormWindowState.Minimized) 
{ 
    MyForm.WindowState = FormWindowState.Normal; 
} 
+0

¿Qué sucede si el estado de la ventana anterior no era 'Normal' sino' Maximizado'? –

+0

Puede usar el botón para bajar el resplandor en la esquina superior de las ventanas –

-1

El código anterior hizo el trabajo no es para mí en todas las situaciones

Después de comprobar las banderas También tiene que comprobar ShowCmd = 3 y si es así, maximice más restaure