C# winform 实现窗口靠近屏幕边缘自动吸附

C#中实现窗口靠近屏幕边缘,自动吸附。
转载:https://blog.csdn.net/qq_35831134/article/details/88751067

        new bool Hide = false;       //用来表示当前隐藏状态,例如Hide=false就是 不在隐藏状态
        string type = "";       //用来表示窗口隐藏在哪个方向
        private void Timer2_Tick(object sender, EventArgs e)    //定时器2 timer2_Tick函数
        {
            //this.TopMost = false;        //窗体不显示在所有软件最前面
            Point pt = new Point(Form.MousePosition.X, Form.MousePosition.Y);//获得当前鼠标位置 
            Screen screen = Screen.PrimaryScreen;
            int width = screen.Bounds.Width;            //获取屏幕的宽度     
            int height = screen.Bounds.Height;          //获取屏幕的高度
            if (!this.Bounds.Contains(pt))              //判断鼠标是否在窗体内 
            {   //如果不在窗体内
                if (Hide == false)
                {
                    if (this.Location.X < 10)           //窗口左边碰到屏幕最左边
                    {
                        this.Left = -this.Width + 3;    //隐藏窗口,窗口宽度加3取反(为负数)
                        Hide = true;
                        type = "left";                  //窗口隐藏在左边
                    }
                    else if (width - this.Location.X - this.Width < 10)//窗口右边碰到屏幕最右边
                    {
                        this.Left = width - 3;            //隐藏窗口,窗口宽度加3取反(为负数)
                        Hide = true;
                        type = "right";                 //窗口隐藏在右边
                    }
                    else if (this.Location.Y < 10)      //窗口上边碰到屏幕最上边
                    {
                        this.Top = -this.Height + 3;    //隐藏窗口,窗口高度加3取反(为负数)
                        Hide = true;
                        type = "up";                    //窗口隐藏在上边
                    }
                }
        
            }
            else
            {    //如果在窗体内
                if (this.Location.X > 20 && type == "left")
                {
                    Hide = false;
                }
                else if (width - this.Location.X - this.Width > 20 && type == "right")
                {
                    Hide = false;
                }
                else if (this.Location.Y > 20 && type == "up")
                {
                    Hide = false;
                }
                //如果在窗体内且之前是隐藏状态
                if (Hide == true)
                {
                    this.TopMost = true;        //窗体显示在所有软件最前面
                    if (type == "left")
                    {
                        this.Left = 0;
                        Hide = false;
                    }
                    else if (type == "right")
                    {
                        this.Left = width - this.Width;
                        Hide = false;
                    }
                    else if (type == "up")
                    {
                        this.Top = 0;
                        Hide = false;
                    }
                }
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer2.Interval = 1;//1毫秒
            timer2.Start();     //启动定时器2 
        }
要在 C# WinForm 窗口实现屏幕录制,可以使用 .NET Framework 中提供的 `System.Drawing` 命名空间下的 `Screen` 和 `Graphics` 类,以及 `System.Windows.Forms` 命名空间下的 `Timer` 控件。 具体步骤如下: 1. 在窗口中添加 `PictureBox` 控件,用于显示录制的屏幕内容。 2. 添加一个 `Timer` 控件,设置其 `Interval` 属性为需要录制的帧率(例如 30 毫秒)。 3. 在 `Timer.Tick` 事件中,使用 `Graphics.CopyFromScreen` 方法将屏幕内容拷贝到 `PictureBox` 控件中。 4. 启动 `Timer` 控件,开始录制屏幕。 以下是一个简单的示例代码: ```csharp public partial class Form1 : Form { private Timer timer; private Bitmap bitmap; public Form1() { InitializeComponent(); timer = new Timer(); timer.Interval = 30; // 30毫秒一帧 timer.Tick += Timer_Tick; } private void Timer_Tick(object sender, EventArgs e) { if (bitmap == null) { bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); } using (var g = Graphics.FromImage(bitmap)) { g.CopyFromScreen(0, 0, 0, 0, bitmap.Size); pictureBox1.Image = bitmap; } } private void button1_Click(object sender, EventArgs e) { timer.Start(); // 开始录制 } private void button2_Click(object sender, EventArgs e) { timer.Stop(); // 停止录制 } } ``` 在这个示例中,通过每隔 30 毫秒执行一次 `Timer_Tick` 事件,并在其中将屏幕内容拷贝到 `PictureBox` 控件中,实现屏幕录制的功能。通过点击 `button1` 和 `button2` 按钮来开始和停止录制。注意,由于屏幕录制可能会消耗大量的系统资源,建议在录制时关闭其他不必要的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值