如何用C#做一个悬浮窗口程序

2025-02-27 08:39:22
推荐回答(1个)
回答1:

大致的步骤如下。 首先是主窗体部分,即要判断窗体的状态来决定是否显示悬浮窗口。局部成员声明: private FormWindowState fwsPrevious; private frmTopMost myTopMost; 主窗体的Load事件: privatevoid frmMain_Load(object sender, System.EventArgs e) { // Save window state fwsPrevious = this.WindowState; // Create top most window myTopMost = new frmTopMost( this ); } 主窗体的SizeChanged事件: privatevoid frmMain_SizeChanged(object sender, System.EventArgs e) { if( this.WindowState == FormWindowState.Minimized ) { // Window minimized // Show top most window myTopMost.Show(); this.ShowInTaskbar = false; } elseif( this.WindowState != fwsPrevious ) { // Save current window state fwsPrevious = this.WindowState; } } 然后,就是还原窗口方法,即供悬浮窗口进行调用的。 /// /// Restore window state /// publicvoid RestoreWindow() { this.WindowState = fwsPrevious; this.ShowInTaskbar = true; } 下来就是悬浮窗口部分代码,首先要设置其窗体的FormBorderStyle为None,然后设置其的TopMost为true,接下来,就是主要是三个鼠标事件的处理,以下,具体说明如何实现的。 局部成员声明。 privatevoid frmTopMost_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if( blnMouseDown ) { //Get the current position of the mouse in the screen ptMouseNewPos = Control.MousePosition; //Set window position ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrrnetPos.X + ptFormPos.X; ptFormNewPos.Y = ptMouseNewPos.Y - ptMouseCurrrnetPos.Y + ptFormPos.Y; //Save window position Location = ptFormNewPos; ptFormPos = ptFormNewPos; //Save mouse position ptMouseCurrrnetPos = ptMouseNewPos; } } privatevoid frmTopMost_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if(e.Button==MouseButtons.Left) { blnMouseDown = true; // Save window position and mouse position ptMouseCurrrnetPos = Control.MousePosition; ptFormPos = Location; } } privatevoid frmTopMost_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { if( e.Button == MouseButtons.Left) //Return back signal blnMouseDown = false; } 然后就是双击悬浮窗体,进行恢复主窗体。