2016-09-07 85 views
5

如何區分當前最小化窗口是否在此之前最大化,而不是C#/ WinForms中的正常狀態?檢查當前最小化窗口在最小化時是處於最大化還是正常狀態

if (WindowState == FormWindowState.Minimized) 
{ 
    Properties.Settings.Default.Location = RestoreBounds.Location; 
    Properties.Settings.Default.Size = RestoreBounds.Size; 
    Properties.Settings.Default.IsMaximized = ...; // How do I know if the window would be restored to maximized? 
} 

我想讓我的窗口持續的位置和狀態,使用應用程序的設置,我下面https://stackoverflow.com/a/1876326/492336但如果窗口在關閉的時間最小化,我不希望它啓動時最小化對下一個應用程序的開始(這是目前的答案)。

我想要的是,如果窗口在最小化時已經被最大化,並且如果它在最小化時處於正常狀態,則以正常狀態開始。

+0

你可以在裏面'WndProc'方法檢查的形式已經被最小化,來看看[這裏](https://msdn.microsoft.com/en-我們/庫/窗/桌面/ ms646360(v = vs.85)的.aspx)。 –

回答

3

WinForms不會公開任何WindowStateChanged事件,那麼你必須自己跟蹤它。 Windows會發送一個WM_SYSCOMMAND形式時,狀態變化:

partial class MyForm : Form 
{ 
    public MyForm() 
    { 
     InitializeComponent(); 

     _isMaximized = WindowState == FormWindowState.Maximized; 
    } 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_SYSCOMMAND) 
     { 
      int wparam = m.WParam.ToInt32() & 0xfff0; 

      if (wparam == SC_MAXIMIZE) 
       _isMaximized = true; 
      else if (wparam == SC_RESTORE) 
       _isMaximized = false; 
     } 

     base.WndProc(ref m); 
    } 

    private const int WM_SYSCOMMAND = 0x0112; 
    private const int SC_MAXIMIZE = 0xf030; 
    private const int SC_RESTORE = 0xf120; 
    private bool _isMaximized; 
} 
相關問題