本文实例讲述了C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法。分享给大家供大家参考。具体如下:
这里演示C#实现主窗体最小化后出现悬浮框,双击悬浮框恢复原窗体的效果。类似于360桌面。
主窗体:frmMain
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace AppDemo
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
/// <summary>
/// 窗体初始状态
/// </summary>
private FormWindowState fwsPrevious;
/// <summary>
/// 悬浮窗体
/// </summary>
private frmTopMost myTopMost;
/// <summary>
/// 主窗体的Load事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void frmMain_Load( object sender, EventArgs e)
{
fwsPrevious = this .WindowState;
myTopMost = new frmTopMost( this );
}
/// <summary>
/// 主窗体的SizeChanged事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void frmMain_SizeChanged( object sender, EventArgs e)
{
if ( this .WindowState == FormWindowState.Minimized)
{
myTopMost.Show();
this .ShowInTaskbar = false ;
}
else if ( this .WindowState != fwsPrevious)
{
fwsPrevious = this .WindowState;
}
}
/// <summary>
/// 还原窗口方法,即供悬浮窗口进行调用的。
/// </summary>
public void RestoreWindow()
{
this .WindowState = fwsPrevious;
this .ShowInTaskbar = true ;
}
}
}
|
悬浮子窗体:frmTopMost
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace AppDemo
{
/// <summary>
/// 首先要设置其窗体的FormBorderStyle为None,然后设置其的TopMost为true,接下来,就是主要是三个鼠标事件的处理
/// </summary>
public partial class frmTopMost : Form
{
public frmTopMost()
{
InitializeComponent();
}
/// <summary>
/// 悬浮窗口的构造函数
/// </summary>
/// <param name="main"></param>
public frmTopMost(frmMain main)
{
InitializeComponent();
pParent = main;
}
private Point ptMouseCurrrnetPos, ptMouseNewPos, ptFormPos, ptFormNewPos;
private bool blnMouseDown = false ;
private frmMain pParent;
/// <summary>
/// 悬浮窗口的Load事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void frmTopMost_Load( object sender, EventArgs e)
{
this .Show();
this .Top = 100;
this .Left = Screen.PrimaryScreen.Bounds.Width - 100;
this .Width = 80;
this .Height = 80;
}
private void frmTopMost_MouseMove( object sender, MouseEventArgs e)
{
if (blnMouseDown)
{
ptMouseNewPos = Control.MousePosition;
ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrrnetPos.X + ptFormPos.X;
ptFormNewPos.Y = ptMouseNewPos.Y - ptMouseCurrrnetPos.Y + ptFormPos.Y;
Location = ptFormNewPos;
ptFormPos = ptFormNewPos;
ptMouseCurrrnetPos = ptMouseNewPos;
}
}
private void frmTopMost_MouseDown( object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
blnMouseDown = true ;
ptMouseCurrrnetPos = Control.MousePosition;
ptFormPos = Location;
}
}
private void frmTopMost_MouseUp( object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
blnMouseDown = false ;
}
/// <summary>
/// 双击悬浮窗体,进行恢复主窗体。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void frmTopMost_MouseDoubleClick( object sender, MouseEventArgs e)
{
SwitchToMain();
}
private void SwitchToMain()
{
pParent.RestoreWindow();
this .Hide();
}
}
}
|
希望本文所述对大家的C#程序设计有所帮助。