Winform 限制窗体只能在屏幕内, 不能拖拽到屏幕外面
添加一个类文件"BaseForm.cs"代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Runtime.InteropServices;
namespace WindowsFormsApp3
{
public class BaseForm : Form
{
private Point _mouseDownPos;
private bool _move;
protected override void WndProc(ref Message m)
{
RECT nativeRect;
switch (m.Msg)
{
case 0x20:
int lp = m.LParam.ToInt32();
if ((lp & 0xFFFF) == 2 &&
((lp >> 0x10) & 0xFFFF) == 0x201)
{
_mouseDownPos = Control.MousePosition;
_move = true;
}
break;
case 0x231:
if (_move)
{
Rectangle rect = Screen.GetWorkingArea(this);
nativeRect = new RECT(
_mouseDownPos.X - Location.X,
_mouseDownPos.Y - Location.Y,
rect.Right - (Bounds.Right - _mouseDownPos.X),
rect.Bottom - (Bounds.Bottom - _mouseDownPos.Y));
ClipCursor(ref nativeRect);
}
break;
case 0x0232:
if (_move)
{
nativeRect = new RECT(Screen.GetWorkingArea(this));
ClipCursor(ref nativeRect);
_move = false;
}
break;
}
base.WndProc(ref m);
}
public static extern bool ClipCursor(ref RECT lpRect);
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
public RECT(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public RECT(Rectangle rect)
{
Left = rect.Left;
Top = rect.Top;
Right = rect.Right;
Bottom = rect.Bottom;
}
public Rectangle Rect
{
get
{
return new Rectangle(
Left,
Top,
Right - Left,
Bottom - Top);
}
}
public Size Size
{
get
{
return new Size(Right - Left, Bottom - Top);
}
}
public static RECT FromXYWH(int x, int y, int width, int height)
{
return new RECT(x,
y,
x + width,
y + height);
}
public static RECT FromRectangle(Rectangle rect)
{
return new RECT(rect.Left,
rect.Top,
rect.Right,
rect.Bottom);
}
}
}
}
新建应用窗体"Form1.cs",继承"BaseForm"
public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}
}
调试运行,窗体只能在屏幕内部来回拖动,无法拖拽到屏幕外。
来源:C#社区原文:https://www.hicsharp.com/a/0c2ee4aded234c8fa023c9f751a57061
绝对干货,楼主给力,支持了!!! 真是被感动的痛哭流涕……
强烈支持楼主ing…… 原来还有这种操作,长见识了! 蹲一波同款,有没有姐妹 / 兄弟推荐? 水个经验,支持楼主,加油呀 评论区人才辈出,笑到停不下来😂 赞同 + 10086,没毛病,完全没毛病 谁懂啊!真的被戳中笑点 / 泪点了
页:
[1]
2