Form non déplaçable [Résolu]

Messages postés
68
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
23 février 2011
- - Dernière réponse : Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
43
3
Merci
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# 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de MorpionMx
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
3
Merci
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]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
0
Merci
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]
Commenter la réponse de sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
0
Merci
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]
Commenter la réponse de sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
0
Merci
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]
Commenter la réponse de sebmafate
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
36
0
Merci
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 );
}
Commenter la réponse de Lutinore

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.