主窗体中有做两个处理:
1,主窗体在最小化时,悬浮窗显示
代码:

void MainFormSizeChanged(object sender, EventArgs e)
{
if( this.WindowState == FormWindowState.Minimized )
{
topMostForm.Show();
this.ShowInTaskbar = false;
}
else if( this.WindowState != previouseState )
{
previouseState = this.WindowState;
}
}
{
if( this.WindowState == FormWindowState.Minimized )
{
topMostForm.Show();
this.ShowInTaskbar = false;
}
else if( this.WindowState != previouseState )
{
previouseState = this.WindowState;
}
}
2,提供还原主窗口的方法
/// <summary>
/// 还原主窗口
/// </summary>
public void RestoreWindowState()
{
this.WindowState=previouseState;
this.ShowInTaskbar=true;
}
/// 还原主窗口
/// </summary>
public void RestoreWindowState()
{
this.WindowState=previouseState;
this.ShowInTaskbar=true;
}
悬浮窗处理:
1,设置窗口状态为None,以去掉窗体边框
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
2,Load事件里,亮点是设置窗口的透明度
代码:
/// <summary>
/// 设置透明
/// </summary>
private void SetClarity(double prameter)
{
this.Opacity=prameter;
}
/// 设置透明
/// </summary>
private void SetClarity(double prameter)
{
this.Opacity=prameter;
}
3,悬浮窗的鼠标事件:
代码:

void TopMostFormMouseDown(object sender, MouseEventArgs e)
{
if(e.Button==MouseButtons.Left)
{
blnMouseDown = true;
// 保存当前,鼠标位置,窗口位置
ptMouseCurrrnetPos = Control.MousePosition;
ptFormPos = Location;
}
}
void TopMostFormMouseUp(object sender, MouseEventArgs e)
{
if(e.Button==MouseButtons.Left)
{
blnMouseDown=false;
}
}
void TopMostFormMouseMove(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;
}
}
{
if(e.Button==MouseButtons.Left)
{
blnMouseDown = true;
// 保存当前,鼠标位置,窗口位置
ptMouseCurrrnetPos = Control.MousePosition;
ptFormPos = Location;
}
}
void TopMostFormMouseUp(object sender, MouseEventArgs e)
{
if(e.Button==MouseButtons.Left)
{
blnMouseDown=false;
}
}
void TopMostFormMouseMove(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;
}
}
4、转换为主窗口的函数:
代码:
void TopMostFormDoubleClick(object sender, EventArgs e)
{
SwitchToMainForm();
}
void SwitchToMainForm()
{
this.mainForm.RestoreWindowState();
this.Hide();
}
{
SwitchToMainForm();
}
void SwitchToMainForm()
{
this.mainForm.RestoreWindowState();
this.Hide();
}