302Soft—302软件技术联盟

ASP.NET / C# / PowerBuilder 技术交流
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

类似于FlashGet,迅雷一样的悬浮窗口

Posted on 2007-01-09 12:31  寒夜听雨  阅读(1883)  评论(1编辑  收藏  举报
第一部分 :

经常会看到类似FlashGet和迅雷这样的下载工具,当最小化时,屏幕右上角会出现一个悬浮窗口,可以用鼠标拖动到任何位置,鼠标右键可以做一些操作,鼠标移上去的时候下面也会有提示,那么这些用C#是如何实现的哪?

第一,悬浮窗口是一个TopMost窗体(新建窗体,设置TopMost属性);
第二,鼠标拖动,做拖动就是要对TopMost窗体添加一个MouseMove事件,判断鼠标的位置,通过改变Location移动TopMost窗体;
第三,鼠标右键,在 .net 2.0里可以对TopMost窗体添加ContextMenuStrip来实现;
第四,跟随鼠标的提示,可以对窗体添加ToolTip组件;ToolTip有3个主要的延迟属性:InitialDelay (多长时间工具提示字符串才会出现)、ReshowDelay(移到另一个控件时,出现后面的工具提示字符串所需的毫秒数)、AutoPopDelay(提示字符串显示多长时间),在窗体上可以设置这些属性。不过MS做的这个组件似乎有点问题,如果移动了窗体,那么ToolTip就再也不会出现提示,还有就是如果AutoPopDelay=5000;那么5秒之后提示框自动消失,并且以后再也不会出现提示,但是如果你是在<5秒时手动移开了鼠标,那么才正常;为了避免这种情况,可以给TopMost窗体添加两个事件:frmTopMost_MouseEnter 和frmTopMost_MouseLeave:
        private void frmTopMost_MouseEnter(object sender, System.EventArgs e)
        {
            
this.toolTip1.Active = true;
            
this.toolTip1.AutoPopDelay = 5000;
            
this.toolTip1.InitialDelay = 500;
            
this.toolTip1.ReshowDelay = 100;
            
this.toolTip1.ShowAlways = true;
        }

        private void frmTopMost_MouseLeave(object sender, System.EventArgs e)
        {
            
this.toolTip1.Active = false;
        }

这样就正常了。

第二部分 部分代码

鼠标拖动窗体
private void frmTopMost_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            
if (blnMouseDown)
            {
                
//Get the current postion of the mouse in the screen.
                ptMouseNewPos = Control.MousePosition;

                
//Set window postion.
                ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrentPos.X + ptFormPos.X;
                ptFormNewPos.Y 
= ptMouseNewPos.Y - ptMouseCurrentPos.Y + ptFormPos.Y;

                
//Save window postion.
                Location = ptFormNewPos;
                ptFormPos 
= ptFormNewPos;

                
//Save mouse pontion.
                ptMouseCurrentPos = ptMouseNewPos;
            }
        }

第三部分

Source  DownLoadExe files:https://files.cnblogs.com/Roger52027/TopMost.rar
Solution files:https://files.cnblogs.com/Roger52027/TopMostSolution.rar

注:此文章是参考愚翁大哥的一篇文章而写的。地址:http://blog.csdn.net/Knight94

Copyright(C) 2004-2007 302Soft-寒夜听雨 版权所有