Form non déplaçable

Résolu
wald39 Messages postés 68 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 23 février 2011 - 6 avril 2007 à 10:43
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 6 avril 2007 à 15:37
Bourjour à tous,
Est ce que quelqu'un saurait comment empècher le déplacement d'une fenêtre ?
Merci d'avance.

6 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 avril 2007 à 11:02
Salut,

trouvé sur les forums MSDN, a ajouter dans le code de ta Form

<hr />

protected
override
void WndProc(
ref
Message m)
{
   if (m.Msg 0x216 || m.Msg 0x214)
   { 

      RECT rc;
      rc.Left =
this.Left;
      rc.Top =
this.Top;
      rc.Bottom =
this.Bottom;
      rc.Right =
this.Right;

      Marshal.StructureToPtr(rc, m.LParam,
false);
      m.Result = (
IntPtr)1;

      return;
   }

   base.WndProc(
ref m);
}[

StructLayout(
LayoutKind.Sequential)]

public
struct
RECT
{

   public
int Left;

   public
int Top;

   public
int Right;

   public
int Bottom;
}
<hr />

Mx
MVP C# 
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
6 avril 2007 à 11:35
arrrrrggggg... la freetextbox

private const int WM_NCHITTEST = 0x84;
private const int HTCAPTION = 2;
private const int HTCLIENT = 1;


protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);


    if (m.Msg WM_NCHITTEST && m.Result new IntPtr(HTCAPTION)) {
        m.Result = new IntPtr(HTCLIENT);
    }
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
6 avril 2007 à 11:12
le plus simple est de faire une surcharge de WndProc et d'intercepter le message WM_NCHITTEST (0x84 si je me souviens bien)

et si la valeur retournée est HTCAPTION, on retourne HTCLIENT

exemple :

protected override void WndProc(ref Message m) {
   base.WndProc(ref m);
   
   if (m.Result == HTCAPTION) 
      m.Result = HTCLIENT;
}
avec : HTCAPTION 2 et HTCLIENT 1

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
6 avril 2007 à 11:22
oops... j'ai oublié un truc :

protected override void WndProc(ref Message m) {
   base.WndProc(ref m);
      if (m.Message WM_NCHITTEST && m.Result HTCAPTION) 
      m.Result = HTCLIENT;
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
6 avril 2007 à 11:33
après vérification... et correction, voici un code qui marche ;)

private

const
int WM_NCHITTEST = 0x84;

private
const
int HTCAPTION = 2;

private
const
int HTCLIENT = 1;

protected
override
void WndProc(
ref
Message m)
{

   base.WndProc(
ref m);
   if (m.Msg WM_NCHITTEST && m.Result
new
IntPtr (HTCAPTION)) {
      m.Result =
new
IntPtr(HTCLIENT);
   }
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 avril 2007 à 15:37
Seb, sur le forum Aogie avait donné une version plus élégante qui permet de préserver le double click sur la barre de titre.

private const int WM_NCLBUTTONDOWN = 0x00A1;
private const int HTCAPTION = 2;


protected override void WndProc( ref Message m )
{
    if ( m.Msg != WM_NCLBUTTONDOWN || m.WParam != ( IntPtr )HTCAPTION )
        base.WndProc( ref m );
}
0
Rejoignez-nous