C#中利用"消息处理"实现在窗体中按下鼠标左键拖动窗体_L

本文介绍了一种在.NET框架下使任何窗体都可以通过鼠标在其任意位置进行拖动的方法。通过重写WndProc方法并处理WM_NCHITTEST消息,使得整个窗口区域都被识别为标题栏区域。

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

在Windows SDK编程中,这种功能很容易实现:只要在收到WM_NCHITTEST消息的时候总是返回HTCAPTION就可以了
对于.NET,我觉得最好的办法就是编写一个MyForm类型,从Form继承,并且override WndProc方法,在收到WM_NCHITTEST消息时返回HTCAPTION(具体的数值可以在Windows.h中找到)
这样做不过是“欺骗”Windows,使其认为整个窗口都是“标题栏”
把下面这段代码加到VS.NET生成的从Form继承的类当中即可实现
private int WM_NCHITTEST = 0x0084;
private int HTCAPTION = 2;
protected override void WndProc(ref System.Windows.Forms.Message msg)
{
    if (msg.Msg == WM_NCHITTEST)
          msg.Result = (System.IntPtr)HTCAPTION;
    else base.WndProc(ref msg);
}
Windows在特定的时候会询问应用程序当前的鼠标在窗口的什么位置,通过发送WM_NCHITTEST消息,应用可以通知Windows,当前鼠标停留在标题兰(HTCAPTION),而Windows在鼠标在标题栏拖动的时候会拖动整个窗口


.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值