时间: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邮箱联系删除。
本文介绍在使用C#开发WinForm窗体程序时,如何设置窗体的大小不能被改变。我们在开发一个窗体(WinForm)程序时,所有的控件都部署在程序界面上了,如果这
本文实例讲述了WinForm窗体间传值的方法。分享给大家供大家参考。具体实现方法如下:窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方
本文实例讲述了winform实现创建最前端窗体的方法。分享给大家供大家参考。具体实现方法如下:一、需求:1).需要这个窗体始终处于前端而且可用2).在主窗体打开
本功能是在winform平台上实现的,其他平台大同小异,不多做介绍。1.首先创建一个测试用winform窗体2.在winform窗体上添加一个notifyIco
本文实例讲述了C#实现winform用子窗体刷新父窗体及子窗体改变父窗体控件值的方法。分享给大家供大家参考。具体如下:第一种方法:用委托,Form2和Form3