2010-03-03 7 views
1

Tout d'abord, désolé pour mon mauvais anglais :)
Deuxièmement, je peux savoir quand la forme est étant Déplacé/redimensionnée, en utilisant ce code:Comment puis-je remplacer la commande du bouton de réduction?

protected override void WndProc(ref Message m) 
    { 

     if (m.Msg == WM_WINDOWPOSCHANGING) 
     { 
      WINDOWPOS winPos = new WINDOWPOS(); 
      winPos = (WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(WINDOWPOS)); 

      //Here I just need to change the values of the WINDOWPOS structure 

      Marshal.StructureToPtr(winPos, m.LParam, true); 
     } 
    } 

Le message WM_WINDOWPOSCHANGING est également envoyé lorsque l'utilisateur est en minimisant ou en maximisant la fenêtre. Mais comment puis-je savoir quand l'utilisateur maximise/minimise, pas déplacer/redimensionner? J'ai essayé obtenir la propriété WindowState, mais cela n'a pas fonctionné :(
Le code de la structure WINDOWPOS est:

[StructLayout(LayoutKind.Sequential)] 
public struct WINDOWPOS 
{ 
    public IntPtr hwnd; 
    public IntPtr hwndInsertAfter; 
    public int x; 
    public int y; 
    public int cx; 
    public int cy; 
    public int flags; 
} 

Toute aide

+0

Désolé de demander mais pourquoi voulez-vous vous éloigner de la fonctionnalité d'interface utilisateur acceptée? – Lazarus

Répondre

1

Vous pouvez piéger le WM_SYSCOMMAND en remplaçant WndProc() Mais il peut facilement être fait aussi bien avec un gestionnaire d'événements pour l'événement Resize.

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     mPrevState = this.WindowState; 

    } 
    FormWindowState mPrevState; 
    protected override void OnResize(EventArgs e) { 
     base.OnResize(e); 
     if (mPrevState != this.WindowState) { 
      mPrevState = this.WindowState; 
      // Do something 
      //.. 
     } 
    } 
} 
+0

Et ce dernier est, bien sûr, beaucoup plus facile. De plus, il capture les minimisations non effectuées en cliquant sur le bouton minimiser. – Brian

+0

J'ai essayé d'utiliser le message WM_SYSCOMMAND, mais cela ne fonctionne pas lorsque j'ai défini la propriété WindowState :(Je veux bloquer l'action de réduction et la remplacer! Mais j'essaierai d'envoyer les commandes système à la place. –

Questions connexes