Empecher le deplacement d'une fenetre.

Signaler
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009
-
Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007
-
Bonsoir à tous

Quelqu'un saurai t il comment empecher de deplacer une fenetre avec la souris, sans mettre le FormBorderStyle à None.



merci

11 réponses

Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

sans mettre le WindowState à maximized.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
très simple :

fait un override de WndProc comme ceci :



protected
override
void WndProc(
ref Message m) {



if (m.Msg == 0x84) {
// WM_NCHITTEST


m.Result = 1;
// HT_CLIENT


}
else {



base.WndProc (
ref m);


}


}


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

Merci, j'essaie et te tiens au courant.

Que du nouveau pour moi.

@+
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

j'ai une erreur et franchement ???

l'erreur:

Error 1 Impossible de convertir
implicitement le type 'int' en 'System.IntPtr'. Une conversion
explicite existe (un cast est-il manquant ?)

je cherche IntPtr

@+
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut,


m.Result = ( IntPtr )1;

ou

m.Result = new IntPtr( 1 );
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

J'ai trouvé grâce à ton idée de départ et à MSDN

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_nchittest.asp



le code suivant fonctionne



private const int WM_NCHITTEST = 0x84;

private const int HTCAPTION = 0x2;

private const int HTBORDER = 0x18;



protected override void WndProc(ref Message m)

{

base.WndProc(ref m);

if (m.Msg == WM_NCHITTEST)

{

if (m.Result.ToInt32() == HTCAPTION)

{


m.Result = new IntPtr(HTBORDER);

}

}

}

<hr size="2" width="100%">un grand merci



PS

Comment fais tu pour avoir des lignes de code en couleur ?

et insérer des liens hypertexte.
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

Lutinore merci de t'etre penché sur mon cas. je tapais ma réponse quand tu as repondu.
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

La solution de sebmafate empechait aussi de fermer le Form avec la croix de fermeture.

Encore merci à vous deux.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
Désolé... je fais parti de ces gens faibles qui dorment la nuit... et je partais me coucher :p


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

pas de soucis.merci
Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007

l'interception du message message WM_NCHITTEST est assez violente car on ne peut plus rien faire avec cette barre de titre. On ne peut plus agrandir la fenêtre par double clic sur la barre de titre par exemple.
Sachant qu'une fenêtre déplacée reçoit le message WM_NCLBUTTONDOWN avec le WParam égal à HTCAPTION, il faut remplacer le code par ceci :



if (m.Msg != WM_NCLBUTTONDOWN || (
int)m.WParam != HTCAPTION)

base.WndProc(
ref m);

Le double clic sur la barre de titre fonctionne à nouveau.

-- AOGie --