2010-06-23 57 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

相關問題