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#