c# 实现用鼠标拖动没有标题栏的窗口(窗体的任何部分都可实现拖动效果)

本文介绍了一种通过调用Windows API实现窗体任意位置均可拖动的方法。具体步骤包括引入非托管代码、定义常量及函数并最终在MouseDown事件中实现拖动逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上面形式的窗体,实现窗体的任何部分都可实现拖动

首先需要引入非托管代码,直接调用windows api


        public const int WM_NCLBUTTONDOWN = 0xA1;
        public const int HT_CAPTION = 0x2;

        [DllImportAttribute("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd,
                         int Msg, int wParam, int lParam);
        [DllImportAttribute("user32.dll")]
        public static extern bool ReleaseCapture();

DllImportAttribute微软官网msdn解释为:

指示该属性化方法由非托管动态链接库 (DLL) 作为静态入口点公开。

然后再在窗体的Form_MouseDown事件下添加如下代码


        private void Form_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }

还需要注意的是如要使用DllImportAttribute属性需要引入相应的名称空间 即 using System.Runtime.InteropServices;

以上代码便可实现窗体的任何部分都能实现窗体的拖动效果。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值