¿Cómo tomo un formulario que actualmente está minimizado y lo restauro a su estado anterior? No puedo encontrar ninguna manera de determinar si su WindowState
anterior era o Maximized
; pero sé que la información debe almacenarse en alguna parte porque Windows no tiene problemas para hacerlo con aplicaciones en la barra de tareas.C# Programming Unminimize form
Respuesta
No hay una API administrada para esto. La forma de hacerlo es llamar a Invoke GetWindowPlacement y verificar WPF_RESTORETOMAXIMIZED
.
Para obtener más información, consulte este Microsoft How To (que muestra la técnica en VB).
En C#, esto sería:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
private struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public System.Drawing.Point ptMinPosition;
public System.Drawing.Point ptMaxPosition;
public System.Drawing.Rectangle rcNormalPosition;
}
public void RestoreFromMinimzied(Form form)
{
const int WPF_RESTORETOMAXIMIZED = 0x2;
WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
placement.length = Marshal.SizeOf(placement);
GetWindowPlacement(form.Handle, ref placement);
if ((placement.flags & WPF_RESTORETOMAXIMIZED) == WPF_RESTORETOMAXIMIZED)
form.WindowState = FormWindowState.Maximized;
else
form.WindowState = FormWindowState.Normal;
}
this.WindowState = FormWindowState.Normal;
También tienen:
this.WindowState = FormWindowState.Minimized;
this.WindowState = FormWindowState.Maximized;
Ah, no he entendido bien la pregunta:
Restore WindowState from Minimized debe ser lo que estás buscando. Se dice que se puede imitar el comportamiento barra de tareas de la siguiente manera:
SendMessage(form.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
eso no responde a su pregunta - que está pidiendo ya sea para ir a Normal o maximizado si la forma se minimiza la actualidad ... –
He actualizado mi respuesta. Yo malentendí la pregunta. –
Esta es una solución mucho más limpia, muy simple de implementar. –
Si desea almacenar el estado anterior cada vez que hay un cambio (maximizar/minimizar), usted tiene que enganchar en el caso SizeChanged
, según this post on MSDN . Puede obtener el WindowState
allí y almacenarlo.
Hay una mejor opción que almacenar esto usted mismo. Ya ha sido rastreado por la API de Windows. –
Puede realizar un seguimiento de los cambios de estado de la ventana a través del evento de cambio de tamaño. De esta manera:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
prevState = currState = this.WindowState;
}
protected override void OnResize(EventArgs e) {
if (currState != this.WindowState) {
prevState = currState;
currState = this.WindowState;
}
base.OnResize(e);
}
private FormWindowState prevState, currState;
}
- 1. Game Programming Library C++
- 2. Winsock Programming
- 3. Endianness and Socket Programming in C
- 4. C# network programming using lidgren with mono
- 5. Spartan Programming
- 6. C# - Transparente Form
- 7. C# Force Form Focus
- 8. C# Application.Run without Form
- 9. Programming Data Types
- 10. Experiencias con D-programming-language
- 11. python web programming
- 12. Programming in Java bytecode
- 13. NES Programming - Nametables?
- 14. Windows Firewall Programming
- 15. Perl Programming and Distribution
- 16. Android Python Programming
- 17. Windows Assembly Language Programming
- 18. Android Programming setting program text
- 19. VHDL/Verilog related programming forums?
- 20. Scientific Programming Stack para Clojure
- 21. USB-Programming en el iPhone
- 22. Organizing Programming Contest - Cómo compilar y ejecutar
- 23. Launch System Screensaver de C# Windows Form
- 24. Incrustar PowerPoint Viewer en C# Win Form
- 25. Java Game Programming: JOGL vs LWJGL?
- 26. Linear Programming Tool/Libraries for Java
- 27. Erlang Programming: ¿Aprenderá la ayuda de Prolog?
- 28. Dynamic Form Controls
- 29. es application/x-www-form-urlencoded default for html form?
- 30. ¿Cuál es la diferencia entre form action = "" y form action = "."?
@Dan: gracias - Solucioné los errores - (estaba escribiendo sobre la marcha, y copiando desde pinvoke.net, que tenía el problema de ref/out incorrecto ...) –
@Dan: aunque suena como que esto funcionó para ti , al menos ;) –