WinForm限制窗体不能移到屏幕外的方法

时间:2021-05-20

本文实例讲述了WinForm限制窗体不能移到屏幕外的方法。分享给大家供大家参考。具体实现方法如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Drawing;using System.Runtime.InteropServices;namespace AppForm{ /// <summary> /// WinForm限制窗体不能移到屏幕外 /// </summary> public class FrmBase : 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); } } }}

希望本文所述对大家的C#程序设计有所帮助。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章