首页 > 编程 > C# > 正文

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

2020-01-24 01:31:27
字体:
来源:转载
供稿:网友

本文实例讲述了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#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表