从最小化恢复WindowState

是否有一个简单的方法来恢复最小化的forms到其以前的状态,正常或最大化? 我期待与单击任务栏(或右键单击并select恢复)相同的function。

到目前为止,我有这个,但是如果这个forms以前是最大化的,它仍然会作为一个正常的窗口回来。

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

我必须在forms上处理状态变化才能记住以前的状态吗?

我使用下面的扩展方法:

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

然后在我的代码中调用form.Restore()

将表单恢复到正常状态的最简单方法是:

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

你可以模拟点击任务栏button,如下所示:

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

对我来说,上面的代码不起作用。

但最后我find了工作代码。 这里是:

  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; 

我猜,你可以通过简单的谷歌searchfind所有需要的“导入”function。

上面的代码在所有情况下都不适合我

检查标志后,我也必须检查showcmd = 3,如果是这样最大限度地还原