Enfermer la souris dans une fenêtre

Résolu
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 - 29 déc. 2004 à 16:15
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 29 déc. 2004 à 18:54
Est-il possible de bloquer la souris dans une certaine zone en C#?

Je voudrais "enfermer" la souris pour qu'elle ne dépasse pas la fenêtre pendant que le click gauche est enfoncé..

Comment faire pour "l'enfermer" ?

4 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 déc. 2004 à 16:53
peut etre un peu barbarre comme solution mais pas mieux pour l'instant :
l'idée est de repositionner le curseur au dernier point "correct" connu des que le curseur quitte le Form :

MouseEventHandler m_mouseMoveEventHandler;
EventHandler m_mouseLeaveEventHandler;
Point m_lastPoint;

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
// abonnement à l'event MouseMove
this.MouseMove  += m_mouseMoveEventHandler;
// enregistrement du premier point
m_lastPoint = new Point(e.X, e.Y);
}

private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// plus besoin de l'event MouseMove
this.MouseMove  -= m_mouseMoveEventHandler;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
// on vérifie si le point est dans la zone cliente du Form
if ( !this.ClientRectangle.Contains(e.X, e.Y) )
Cursor.Position = this.PointToScreen(m_lastPoint);	// non : retour au dernier point correct connu
else
m_lastPoint = new Point(e.X, e.Y);  // oui : enregistrement du point
}


et dans le constructeur du Form :
m_mouseMoveEventHandler = new MouseEventHandler(Form1_MouseMove);


Cocoricoooooooo !!!!
coq
MVP Visual C#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 déc. 2004 à 16:55
hum, oublie le "EventHandler m_mouseLeaveEventHandler", il ne sert à rien là

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
29 déc. 2004 à 18:48
Merci ca marche !!

Très bonne idée pour la solution du code !
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 déc. 2004 à 18:54
Je ne sais pas si c'est ce que tu recherches, mais cet event permet de stopper un drag (touche droite) si la souris sors d'une certaine surface (en loccurance, une form) ...
Je te copie juste une méthode que j'avais faite au sein d'un programme :


/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/// <summary>
/// Cancel the drag if the mouse moves off the form.
/// </summary>
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
private void dataGridFAPList_QueryContinueDrag(object sender, System.Windows.Forms.QueryContinueDragEventArgs e)
{
DataGrid dg = sender as DataGrid;
if(dg != null) 
{
Form f = dg.FindForm();
int x = Control.MousePosition.X - _screenOffset.X;
int y = Control.MousePosition.Y - _screenOffset.Y;

/* Cancel the drag if the mouse moves off the form. The screenOffset takes into account any 
 * desktop bands that may be at the top or left side of the screen. */
if((x < f.DesktopBounds.Left) || (x > f.DesktopBounds.Right) || (y < f.DesktopBounds.Top) || (y > f.DesktopBounds.Bottom)) 
e.Action = DragAction.Cancel;
}
}

0
Rejoignez-nous