• winform 屏幕右上角悬浮窗demo


    当窗体最小化时,显示右悬浮窗!!!

    1新建右上角小窗口

    (1)去除边框 (2)最前显示(设置背景图案)

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Text;
      7 using System.Windows.Forms;
      8 
      9 namespace TopMost
     10 {
     11     public partial class frmTopMost : Form
     12     {
     13         private Point ptMouseCurrentPos, ptMouseNewPos, ptFormPos, ptFormNewPos;
     14         private bool blnMouseDown = false;
     15         private frmMain pParent;
     16         //Add ContextMenuStrip .
     17         private ContextMenuStrip docMenu;
     18 
     19         public frmTopMost(frmMain pMain)
     20         {
     21             InitializeComponent();
     22             pParent=pMain;
     23         }
     24 
     25         private void frmTopMost_Load(object sender, EventArgs e)
     26         {
     27             this.FormBorderStyle = FormBorderStyle.None;
     28             this.TopMost = true;
     29             this.Show();
     30             this.Top = 100;
     31             this.Left = Screen.PrimaryScreen.Bounds.Width - 200;
     32             this.Width = 35;
     33             this.Height = 35;
     34 
     35             docMenu = new ContextMenuStrip();
     36             
     37             ToolStripMenuItem OpenLable = new ToolStripMenuItem();
     38             OpenLable.Text = "Open";
     39             OpenLable.Click+=new EventHandler(OpenLable_Click);
     40             ToolStripMenuItem ExitLable = new ToolStripMenuItem();
     41             ExitLable.Text = "Exit";
     42             ExitLable.Click+=new EventHandler(ExitLable_Click);
     43 
     44             docMenu.Items.AddRange(new ToolStripMenuItem[] { OpenLable,ExitLable});
     45             this.ContextMenuStrip = docMenu;
     46         }
     47         private void frmTopMost_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
     48         {
     49             if (blnMouseDown)
     50             {
     51                 //Get the current postion of the mouse in the screen.
     52                 ptMouseNewPos = Control.MousePosition;
     53 
     54                 //Set window postion.
     55                 ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrentPos.X + ptFormPos.X;
     56                 ptFormNewPos.Y = ptMouseNewPos.Y - ptMouseCurrentPos.Y + ptFormPos.Y;
     57 
     58                 //Save window postion.
     59                 Location = ptFormNewPos;
     60                 ptFormPos = ptFormNewPos;
     61 
     62                 //Save mouse pontion.
     63                 ptMouseCurrentPos = ptMouseNewPos;
     64             }
     65         }
     66 
     67         private void frmTopMost_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e)
     68         {
     69             if (e.Button == MouseButtons.Left)
     70             {
     71                 blnMouseDown = true;
     72 
     73                 //Save window postion and mouse postion.
     74                 ptMouseCurrentPos = Control.MousePosition;
     75                 ptFormPos = Location;
     76             }
     77         }
     78 
     79         private void frmTopMost_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
     80         {
     81             if (e.Button == MouseButtons.Left)
     82             {
     83                 blnMouseDown = false;
     84             }
     85         }
     86         //Restore parent from.
     87         private void frmTopMost_DoubleClick(object sender, System.EventArgs e)
     88         {
     89             SwitchToMain();
     90         }
     91         private void SwitchToMain()
     92         {
     93             pParent.RestoreWindow();
     94             this.Hide();
     95         }
     96 
     97         #region  //Context events.
     98         private void OpenLable_Click(object sender, System.EventArgs e)
     99         {
    100             SwitchToMain();
    101         }
    102         private void ExitLable_Click(object sender, System.EventArgs e)
    103         {
    104             Application.Exit();
    105         }
    106         #endregion
    107 
    108         private void frmTopMost_MouseEnter(object sender, System.EventArgs e)
    109         {
    110             this.toolTip1.Active = true;
    111             this.toolTip1.AutoPopDelay = 500000;
    112             this.toolTip1.InitialDelay = 500;
    113             this.toolTip1.ReshowDelay = 100;
    114             this.toolTip1.ShowAlways = true;
    115         }
    116         private void frmTopMost_MouseLeave(object sender, System.EventArgs e)
    117         {
    118             this.toolTip1.Active = false;
    119         }
    120 
    121     }
    122 }
    View Code

    2、主窗体

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Text;
     7 using System.Windows.Forms;
     8 
     9 namespace TopMost
    10 {
    11     public partial class frmMain : Form
    12     {
    13         public frmMain()
    14         {
    15             InitializeComponent();
    16         }
    17 
    18         private FormWindowState fwsPrevious;
    19         private frmTopMost myTopMost;
    20         private void frmMain_Load(object sender, EventArgs e)
    21         {
    22             //save the windowState;
    23             fwsPrevious = this.WindowState;
    24 
    25             //Create top most window;
    26             myTopMost = new frmTopMost(this);
    27         }
    28 
    29         private void frmMain_SizeChanged(object sender,EventArgs e)
    30         {
    31             if (this.WindowState == FormWindowState.Minimized)
    32             {
    33                 //window minimized.
    34                 //show the most window.
    35                 myTopMost.Show();
    36                 this.ShowInTaskbar = false;
    37             }
    38             else if(this.WindowState!=fwsPrevious)
    39             {
    40                 fwsPrevious = WindowState;
    41             }
    42         }
    43         //Restore window.
    44         public void RestoreWindow()
    45         {
    46             this.WindowState = fwsPrevious;
    47             this.ShowInTaskbar = true;
    48         }
    49     }
    50 }
    View Code

    完!!

  • 相关阅读:
    让小车再飞一会儿 ——记校赛惨痛失败之旅
    排序算法之基数排序
    开博感言
    智能车 SCI实验
    三种算法求解一个数组的子数组最大和
    继续大话考研
    智能车实验室阶段测验之单片机基础
    怎样判断自己掌握了学到的新知识
    排序算法之计数排序
    进程与线程的区别?
  • 原文地址:https://www.cnblogs.com/wwz-wwz/p/7506300.html
Copyright © 2020-2023  润新知