雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

C#實現(xiàn)主窗體最小化后出現(xiàn)懸浮框及雙擊懸浮框恢復原窗體的方法

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊:

本文實例講述了C#實現(xiàn)主窗體最小化后出現(xiàn)懸浮框及雙擊懸浮框恢復原窗體的方法。分享給大家供大家參考。具體如下:

這里演示C#實現(xiàn)主窗體最小化后出現(xiàn)懸浮框,雙擊懸浮框恢復原窗體的效果。類似于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>
    /// 窗體初始狀態(tài)
    /// </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>
    /// 還原窗口方法,即供懸浮窗口進行調(diào)用的。
    /// </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>
    /// 懸浮窗口的構造函數(shù)
    /// </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#程序設計有所幫助。

上一篇:C#通過Semaphore類控制線程隊列的方法

欄    目:C#教程

下一篇:C#編程實現(xiàn)自定義熱鍵的方法

本文標題:C#實現(xiàn)主窗體最小化后出現(xiàn)懸浮框及雙擊懸浮框恢復原窗體的方法

本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/7025.html

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權所有