- 打卡等级:常驻代表
- 打卡总天数:34
- 打卡月天数:6
- 打卡总奖励:9027
- 最近打卡:2025-12-17 23:15:51
管理员
- 积分
- 22569
|
添加一个类文件"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);
- }
-
- [DllImport("user32.dll")]
- public static extern bool ClipCursor(ref RECT lpRect);
-
- [StructLayout(LayoutKind.Sequential)]
- 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
|
|