当前位置: 移动技术网 > IT编程>开发语言>c# > WinForm限制窗体不能移到屏幕外的方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网