2010-06-23 55 views
3

当我的应用程序关闭时,我试图保存我的状态System::Windows::Forms::Form。我可以在没有任何问题的情况下记录窗口的大小,位置和窗口状态,但是如果窗口在关闭时被最大化,那么::Size成员将记录窗口的最大化大小。如何获得表单的非最大化窗口大小?

有什么方法可以记录非最大化的大小,还是我需要拦截on-maximize事件并手动记录它?

回答

2

这不是现成的,你必须P/Invoke GetWindowPlacement。最好的方法是只记录窗口大小,如果窗体处于适当的状态。例如:

protected override void OnResize(EventArgs e) { 
     if (this.WindowState == FormWindowState.Normal) 
      Properties.Settings.Default.WindowSize = this.Size; 
     base.OnResize(e); 
    } 
+0

GetWindowPlacement,除了伟大的,它记录WorkingArea位置坐标,你不能轻易与ScreenArea坐标混合(如果你这样做,你的窗口将被系统任务栏的高度移动) – EricLaw 2013-05-21 18:55:04

+0

相反而不是在每次调整大小时持续保留这个值,您也可以在关闭时检查this.WindowState!= FormWindowState.Normal,如果它被最大化或最小化,请改用RestoreBounds属性。 – EricLaw 2013-05-21 22:00:57

+0

它并不总是持续下去。直到程序调用Save()方法。最好在程序退出时完成。 – 2013-05-21 22:08:49

相关问题