C#中winform窗口做成QQ窗口那样能收缩在电脑屏幕的上方

 1 private void Form1_Load(object sender, EventArgs e)
 2         {
 3             
 4             System.Windows.Forms.Timer StopRectTimer = new System.Windows.Forms.Timer();
 5             StopRectTimer.Tick += new EventHandler(timer1_Tick);
 6             StopRectTimer.Interval = 50;
 7             StopRectTimer.Enabled = true;
 8             this.TopMost = true;
 9             StopRectTimer.Start();
10         }
11 
12         private void timer1_Tick(object sender, EventArgs e)
13         {
14             if (this.Bounds.Contains(Cursor.Position))
15             {
16                 switch (this.StopAanhor)
17                 {
18                     case AnchorStyles.Top:
19                         this.Location = new Point(this.Location.X, 0);
20                         break;
21                     case AnchorStyles.Left:
22                         this.Location = new Point(0, this.Location.Y);
23                         break;
24                     case AnchorStyles.Right:
25                         this.Location = new Point(Screen.PrimaryScreen.Bounds.Width - this.Width, this.Location.Y);
26                         break;
27                     case AnchorStyles.Bottom:
28                         this.Location = new Point(this.Location.X, Screen.PrimaryScreen.Bounds.Height - this.Height);
29                         break;
30                 }
31             }
32             else
33             {
34                 switch (this.StopAanhor)
35                 {
36                     case AnchorStyles.Top:
37                         this.Location = new Point(this.Location.X, (this.Height - 8) * (-1));
38                         break;
39                     case AnchorStyles.Left:
40                         this.Location = new Point((-1) * (this.Width - 8), this.Location.Y);
41                         break;
42                     case AnchorStyles.Right:
43                         this.Location = new Point(Screen.PrimaryScreen.Bounds.Width - 8, this.Location.Y);
44                         break;
45                     case AnchorStyles.Bottom:
46                         this.Location = new Point(this.Location.X, (Screen.PrimaryScreen.Bounds.Height - 8));
47                         break;
48                 }
49             }
50 
51         }
52 
53         internal AnchorStyles StopAanhor = AnchorStyles.None;
54         private void mStopAnhor()
55         {
56             if (this.Top <= 0 && this.Left <= 0)
57             {
58                 StopAanhor = AnchorStyles.None;
59             }
60             else if (this.Top <= 0)
61             {
62                 StopAanhor = AnchorStyles.Top;
63             }
64             else if (this.Left <= 0)
65             {
66                 StopAanhor = AnchorStyles.Left;
67             }
68             else if (this.Left >= Screen.PrimaryScreen.Bounds.Width - this.Width)
69             {
70                 StopAanhor = AnchorStyles.Right;
71             }
72             else if (this.Top >= Screen.PrimaryScreen.Bounds.Height - this.Height)
73             {
74                 StopAanhor = AnchorStyles.Bottom;
75             }
76             else
77             {
78                 StopAanhor = AnchorStyles.None;
79             }
80         }
81 
82         private void hide_LocationChanged(object sender, EventArgs e)
83         {
84             this.mStopAnhor();
85         }
86 
87 }

 【转载】

转载于:https://www.cnblogs.com/masonchi/p/3446034.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 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、付费专栏及课程。

余额充值