C#以编程方式取消窗体的动画化
如何获取当前最小化的表单并将其恢复到以前的状态。我找不到任何方法来确定它以前的C#以编程方式取消窗体的动画化,c#,winforms,C#,Winforms,如何获取当前最小化的表单并将其恢复到以前的状态。我找不到任何方法来确定它以前的WindowState是Normal还是最大化;但我知道这些信息必须存储在某个地方,因为windows在使用任务栏上的应用程序时没有问题 this.WindowState = FormWindowState.Normal; 你还有: this.WindowState = FormWindowState.Minimized; this.WindowState = FormWindowState.Maximized
WindowState
是Normal
还是最大化
;但我知道这些信息必须存储在某个地方,因为windows在使用任务栏上的应用程序时没有问题
this.WindowState = FormWindowState.Normal;
你还有:
this.WindowState = FormWindowState.Minimized;
this.WindowState = FormWindowState.Maximized;
啊,我误解了这个问题:
应该是你要找的。它说你可以像这样模仿任务栏的行为:
SendMessage(form.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
如果您希望在发生更改(最大化/最小化)时存储以前的状态,则必须挂接到
SizeChanged
事件,根据。您可以在那里获取并存储WindowState
。没有用于此的托管API。方法是PInvoke并检查WPF\u restoretomized
有关详细信息,请参见此(在VB中演示此技术)
在C#中,这将是:
[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;
}
可以通过调整大小事件跟踪窗口状态的更改。像这样:
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;
}
这并没有回答他的问题——他问的是,如果表单当前被最小化,是要转到正常状态还是最大化状态……我更新了我的答案。我误解了这个问题。这是一个更干净的解决方案-非常容易实现。有一个比自己存储更好的选择。它已经被Windows API跟踪了。@Dan:谢谢-我修复了错误-(我正在动态键入,并从pinvoke.net复制,它的ref/out问题是错误的…)@Dan:听起来这至少对你有用;)