2016-09-07 1 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

: 윈도우는 WM_SYSCOMMAND 때 폼 상태 변경을 보내드립니다 us/library/windows/desktop/ms646360 (v = vs.85) .aspx). –

답변

3

WinForms는 WindowStateChanged 이벤트를 노출하지 않으므로 혼자서 추적해야합니다. [이] 한 번 봐 (https://msdn.microsoft.com/en-을,

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; 
} 
형태가 최소화되어있는 경우, WndProc` 방법`내에서 확인할 수 있습니다
관련 문제