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 }
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 }
完!!