2009-06-27 13 views

Odpowiedz

68

Aby dostać się przed formie zostało zminimalizowane musisz podpiąć do procedury WndProc:

private const int WM_SYSCOMMAND = 0x0112; 
    private const int SC_MINIMIZE = 0xF020; 

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] 
    protected override void WndProc(ref Message m) 
    { 
     switch(m.Msg) 
     { 
      case WM_SYSCOMMAND: 
       int command = m.WParam.ToInt32() & 0xfff0; 
       if (command == SC_MINIMIZE) 
       { 
        // Do your action 
       } 
       // If you don't want to do the default action then break 
       break; 
     } 
     base.WndProc(ref m); 
    } 

reagować po formularz został zminimalizowany Into the hook Resize Zdarzenie, na które wskazują inne odpowiedzi (zawarte tutaj w celu uzyskania kompletności):

private void Form1_Resize (object sender, EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) 
    { 
     // Do your action 
    } 
} 
+0

0xF030 jest przy maksymalizacji od normalnego stanu okna. 0xF120 to maksymalizacja z paska okien – k4yaman

+0

W rzeczywistości przynosi to tylko wydarzenie Minimize * Click *! To, czego szukasz, to WM_SIZE (0x0005) i SIZE_MINIMIZED (1) –

16

nie wiem o konkretnego imprezy, ale Zdarzenie Resize gdy formularz jest zminimalizowany, można sprawdzić na FormWindowState.Minimized w takim przypadku

+2

To w połączeniu z prywatną flagą "lastState" jest najłatwiejszym sposobem na obejście tego. –

104

Można użyć zdarzenia Resize i sprawdzić Forms.WindowState nieruchomości w przypadku.

private void Form1_Resize (object sender , EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) 
    { 
     // Do some stuff 
    } 
} 
+2

Należy zauważyć, że jest to jedno z tych miejsc, w których [Wyjątki można połknąć] (http://stackoverflow.com/q/4933958/119527). –

5

Dla ludzi, którzy szukają dla okien WPF minimalizując imprezy:

To trochę inna. Do korzystania zwrotna WindowState:

private void Form1_Resize(object sender, EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) 
    { 
     // Do some stuff 
    } 
} 

Impreza w użyciu jest StateChanged (zamiast Resize):

public Main() 
{ 
    InitializeComponent(); 
    this.StateChanged += Form1_Resize; 
}