代码改变世界

摘录的WinForm Control 开发5,WinForm 开发:FlashGetFormDemos ,类似FlashGet的悬浮窗

2010-03-07 00:19  c#在路上  阅读(881)  评论(0)    收藏  举报
主窗体中有做两个处理:
1,主窗体在最小化时,悬浮窗显示
    代码:
代码
        void MainFormSizeChanged(object sender, EventArgs e)
        {
            
ifthis.WindowState == FormWindowState.Minimized )
            {
                topMostForm.Show();
                
this.ShowInTaskbar = false;
            }
            
else ifthis.WindowState != previouseState )
            {
                previouseState 
= this.WindowState;
            }
        }

 

2,提供还原主窗口的方法

        /// <summary>
        
/// 还原主窗口
        
/// </summary>
        public void RestoreWindowState()
        {
            
this.WindowState=previouseState;
            
this.ShowInTaskbar=true;
        }

 

 悬浮窗处理:

1,设置窗口状态为None,以去掉窗体边框

   this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

2,Load事件里,亮点是设置窗口的透明度

   代码:

        /// <summary>
        
/// 设置透明
        
/// </summary>
        private void SetClarity(double prameter)
        {
            
this.Opacity=prameter;
        }

 

 3,悬浮窗的鼠标事件:

   代码:

 

代码
void TopMostFormMouseDown(object sender, MouseEventArgs e)
        {
            
if(e.Button==MouseButtons.Left)
            {
                blnMouseDown 
= true;
     
                
// 保存当前,鼠标位置,窗口位置
                ptMouseCurrrnetPos = Control.MousePosition;
                ptFormPos 
= Location;
            }
        }
        
        
void TopMostFormMouseUp(object sender, MouseEventArgs e)
        {
            
if(e.Button==MouseButtons.Left)
            {
                blnMouseDown
=false;
            }
        }
        
        
void TopMostFormMouseMove(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;
            } 
        }

 

 4、转换为主窗口的函数:

   代码:

     void TopMostFormDoubleClick(object sender, EventArgs e)
        {
            SwitchToMainForm();
        }
        
        
void SwitchToMainForm()
        {
            
this.mainForm.RestoreWindowState();
            
this.Hide();
        }

 

 /Files/csharponworking/FlashFormDemos.zip