当前位置: 首页 > 编程笔记 >

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

傅越
2023-03-14
本文向大家介绍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#程序设计有所帮助。

 类似资料:
  • 有没有办法绕过的正常行为及其屏幕外页限制?我的包含四个,每个片断包含一个图像。我遇到的问题是,在实例化时,会创建两个,这导致从catch同时下载/提取大约20个图像(每个片断大约10个)。是否可以禁用屏幕外页限制? 我的目标是只在选择时下载图像,或者只在用户悬停图像时下载图像。实现这一点的一种方法是使用侦听器并设置一个标志,该标志告诉是否允许下载图像。 我能想到的第二种方法是在上设置一个,并且只在

  • 本文向大家介绍winform创建不规则窗体的方法,包括了winform创建不规则窗体的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了winform创建不规则窗体的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍WinForm窗体间传值的方法,包括了WinForm窗体间传值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了WinForm窗体间传值的方法。分享给大家供大家参考。具体实现方法如下: 窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式:   1.公共静态变量; 2.使用共有属性; 3.使用委托与事件; 4.通过构造函数把主窗体传递到从窗体中;

  • 本文向大家介绍winform实现拖动文件到窗体上的方法,包括了winform实现拖动文件到窗体上的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了winform实现拖动文件到窗体上的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我正在使用Appium在真实设备上测试我的iOS应用程序。在测试期间,我需要进入主屏幕(我必须这样做),但找不到方法。 我发现这里有一个选项可以使用Home按钮的可访问性-Appium iOS无法检查通知层 但是我怎么点击这个呢?Appium不认识这个按钮。 有什么建议吗?

  • 本文向大家介绍winform实现创建最前端窗体的方法,包括了winform实现创建最前端窗体的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了winform实现创建最前端窗体的方法。分享给大家供大家参考。具体实现方法如下: 一、需求: 1).需要这个窗体始终处于前端而且可用 2).在主窗体打开其他模态窗体的时候,这个Form也要处于活动状态。 注意: 设置了Form的 TopMost