移动无边框Winform按住鼠标右键,可能使用本机方法

Fir*_*DoL 3 c# move right-click winforms borderless

我有一种情况,我想通过在其客户区域上按住鼠标右键来移动窗体; 正如我所说,这种形式是无国界的.

我想"原生"地移动它(如果可能的话,否则其他答案也可以).我的意思是当你在标题栏上按住鼠标左键时它的行为方式(鼠标移动和类似的东西,我得到很多奇怪的行为,但也许只是我).

我已经阅读了很多内容,这篇文章看起来很有帮助

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观看以寻找其他有用的东西,WM_NCRBUTTONDOWN出现在我的脑海中, wndproc没有检测到它,也许是因为它是由表单处理的?

任何建议都表示赞赏,谢谢

弗朗切斯科

Joh*_*len 5

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);
    }
}
Run Code Online (Sandbox Code Playgroud)