首页 > 编程 > C# > 正文

C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法

2020-01-24 01:29:34
字体:
来源:转载
供稿:网友

本文实例讲述了C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法。分享给大家供大家参考。具体如下:

这里演示C#实现主窗体最小化后出现悬浮框,双击悬浮框恢复原窗体的效果。类似于360桌面。

主窗体:frmMain

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表