C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法
本文实例讲述了C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法。分享给大家供大家参考。具体如下:
这里演示C#实现主窗体最小化后出现悬浮框,双击悬浮框恢复原窗体的效果。类似于360桌面。
主窗体:frmMain
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Threading;
namespaceAppDemo
{
publicpartialclassfrmMain:Form
{
publicfrmMain()
{
InitializeComponent();
}
///<summary>
///窗体初始状态
///</summary>
privateFormWindowStatefwsPrevious;
///<summary>
///悬浮窗体
///</summary>
privatefrmTopMostmyTopMost;
///<summary>
///主窗体的Load事件
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidfrmMain_Load(objectsender,EventArgse)
{
fwsPrevious=this.WindowState;
myTopMost=newfrmTopMost(this);
}
///<summary>
///主窗体的SizeChanged事件
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidfrmMain_SizeChanged(objectsender,EventArgse)
{
if(this.WindowState==FormWindowState.Minimized)
{
myTopMost.Show();
this.ShowInTaskbar=false;
}
elseif(this.WindowState!=fwsPrevious)
{
fwsPrevious=this.WindowState;
}
}
///<summary>
///还原窗口方法,即供悬浮窗口进行调用的。
///</summary>
publicvoidRestoreWindow()
{
this.WindowState=fwsPrevious;
this.ShowInTaskbar=true;
}
}
}
悬浮子窗体:frmTopMost
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceAppDemo
{
///<summary>
///首先要设置其窗体的FormBorderStyle为None,然后设置其的TopMost为true,接下来,就是主要是三个鼠标事件的处理
///</summary>
publicpartialclassfrmTopMost:Form
{
publicfrmTopMost()
{
InitializeComponent();
}
///<summary>
///悬浮窗口的构造函数
///</summary>
///<paramname="main"></param>
publicfrmTopMost(frmMainmain)
{
InitializeComponent();
pParent=main;
}
privatePointptMouseCurrrnetPos,ptMouseNewPos,ptFormPos,ptFormNewPos;
privateboolblnMouseDown=false;
privatefrmMainpParent;
///<summary>
///悬浮窗口的Load事件
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidfrmTopMost_Load(objectsender,EventArgse)
{
this.Show();
this.Top=100;
this.Left=Screen.PrimaryScreen.Bounds.Width-100;
this.Width=80;
this.Height=80;
}
privatevoidfrmTopMost_MouseMove(objectsender,MouseEventArgse)
{
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;
}
}
privatevoidfrmTopMost_MouseDown(objectsender,MouseEventArgse)
{
if(e.Button==MouseButtons.Left)
{
blnMouseDown=true;
ptMouseCurrrnetPos=Control.MousePosition;
ptFormPos=Location;
}
}
privatevoidfrmTopMost_MouseUp(objectsender,MouseEventArgse)
{
if(e.Button==MouseButtons.Left)
blnMouseDown=false;
}
///<summary>
///双击悬浮窗体,进行恢复主窗体。
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidfrmTopMost_MouseDoubleClick(objectsender,MouseEventArgse)
{
SwitchToMain();
}
privatevoidSwitchToMain()
{
pParent.RestoreWindow();
this.Hide();
}
}
}
希望本文所述对大家的C#程序设计有所帮助。