我有一种情况,我想通过在窗口的客户区域上按住鼠标右键来移动窗口;正如我所说,它的形式是无边界的。
我想“本地”移动它(如果可能的话,否则其他答案也可以)。我的意思是当你在标题栏上按住鼠标左键时它的行为方式(通过鼠标移动和类似的事情我得到了很多奇怪的行为,但也许这只是我)。
我读过很多东西,这篇文章看起来很有帮助
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b9985b19-cab5-4fba-9dc5-f323d0d37e2f/ http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b9985b19-cab5-4fba-9dc5-f323d0d37e2f/
我尝试了各种方法来使用它并观看了http://msdn.microsoft.com/en-us/library/ff468877%28v=VS.85%29.aspx http://msdn.microsoft.com/en-us/library/ff468877%28v=VS.85%29.aspx寻找其他有用的东西,我想到了 WM_NCRBUTTONDOWN ,但是 wndproc 没有检测到它,也许是因为它是由表单处理的?
任何建议表示赞赏,谢谢
弗朗西斯科
public partial class DragForm : Form
{
// Offset from upper left of form where mouse grabbed
private Size? _mouseGrabOffset;
public DragForm()
{
InitializeComponent();
}
protected override void OnMouseDown(MouseEventArgs e)
{
if( e.Button == System.Windows.Forms.MouseButtons.Right )
_mouseGrabOffset = new Size(e.Location);
base.OnMouseDown(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
_mouseGrabOffset = null;
base.OnMouseUp(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (_mouseGrabOffset.HasValue)
{
this.Location = Cursor.Position - _mouseGrabOffset.Value;
}
base.OnMouseMove(e);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)