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#程序设计有所帮助。