2010-03-30 6 views
0

Existe-t-il un événement dans WinForms qui est déclenché lorsqu'une fenêtre est déplacée?Événement de glissement de la fenêtre WinForms

Ou y at-il une meilleure façon de faire ce que je veux: faire tomber l'opacité de la fenêtre à 80% lorsque la fenêtre est déplacée?

Malheureusement, c'est stupidement difficile à chercher car tout le monde cherche un glisser-déposer depuis le shell ou un autre objet.

Répondre

2

Il est l'événement LocationChanged vous voulez:

private void YourApp_LocationChanged(object sender, EventArgs e) 
{ 
    this.Opacity = 0.8; 
} 

que vous aurez à passer outre WndProc et gérer l'événement mouvement de sortie pour réinitialiser l'opacité de retour à 1:

protected override void WndProc(ref Message m) 
{ 
    Trace.WriteLine(m.ToString()); 
    switch (m.Msg) 
    { 
     case WMEXITSIZEMOVE: 
      this.Opacity = 1.0; 
      break; 
    } 
    base.WndProc(ref m); 
} 

Sans oublier de définir le code de message:

private const int WMEXITSIZEMOVE = 0x0232; 

Il peut être mo Ré efficace pour gérer le message WM_ENTERSIZEMOVE (code 0x0231) au lieu de LocationChanged car cela ne ferait que régler l'opacité une fois (au début du glisser) plutôt que continuellement tout au long du glisser.

+0

Je vais essayer les deux WMEXITSIZEMOVE vs WM_ENTERSIZEMOVE, mais cela fait certainement ce dont j'ai besoin. Merci! –

+0

@Steve - Je voulais dire utiliser WM_ENTERSIZEMOVE au lieu de LocationChanged. – ChrisF

+0

Je doute que cela fonctionnera, sauf si vous définissez l'opacité pour le formulaire normal à 99% –

3

Pas besoin de piratage WndProc, cela fonctionne très bien:

protected override void OnResizeBegin(EventArgs e) { 
    this.Opacity = 0.6; 
} 
protected override void OnResizeEnd(EventArgs e) { 
    this.Opacity = 1.0; 
} 

Moves déclenchent aussi les événements OnResizeXxx.

+0

Belle trouvaille - c'est plus propre – ChrisF

+0

Bon appel à ce sujet. Ça a beaucoup mieux marché. Si vous faites quelque chose comme Aero-shake sur Win7, et que vous le faites à nouveau pour ramener les fenêtres, il perd la poignée et maintient la fenêtre à l'opacité de l'ensemble jusqu'à ce que vous la déplaciez à nouveau. –

+0

+1 Mais une mauvaise chose est que si vous maintenez le bouton droit de la souris dans la barre de titre de l'application, il compte comme événement "onresizebegin". – ElektroStudios

Questions connexes