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

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

6 réponses

Meilleure réponse
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
37
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 138 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
Statut
Modérateur
Dernière intervention
14 février 2014
30
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 138 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
Statut
Modérateur
Dernière intervention
14 février 2014
30
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
Statut
Modérateur
Dernière intervention
14 février 2014
30
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
Statut
Modérateur
Dernière intervention
14 février 2014
30
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
Statut
Modérateur
Dernière intervention
27 octobre 2012
27
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