WinForm限制窗體不克不及移到屏幕外的辦法。本站提示廣大學習愛好者:(WinForm限制窗體不克不及移到屏幕外的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是WinForm限制窗體不克不及移到屏幕外的辦法正文
本文實例講述了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#法式設計有所贊助。